Prosty zegarek na attiny 2313


Witam!
Mam ogromny problem z zaprojektowaniem płytki. Zrobiłem prosty układ: attiny 2313, wyświetlacz 7 segmentowy i dwa przyciski. Można by pomyśleć nie da się skopać takiego projektu.. a jednak. Wykonałem pierwszą płytkę pod zegarek, bardzo podobna do płytki termometru uniwersalnego z tej strony. Napisałem program, wszystko działało jednak zegar czasem się resetował, lub zawieszał ( zostawała jedna cyfra na wyświetlaczu i nic się więcej). Działo się coś dziwnego, przy dotknięci przedmiotem metalowym do masy układu procesor się resetował. To samo gdy ustawiało się godzinę gdy naciskało się przycisk (który zwierał do masy) to co któreś przyciśnięci reset... Wieć co tu zrobić... Rezystor 10k między resetem a plusem - nic nie dało, stabilizator napięcia i kondensatory filtrujące - nic nie dało. Pogadałem u mnie na polibudzie z chłopakami, powiedzieli że to pewnie zimne luty lub mikro pęknięcia na płytce. Pomyślałem - może i racja. No to jeszce raz wszystko na grubo z kalafonią ładnie polutowałem - i nic nie dało. Ale co jakciekawsze gdy wkładam ten sam procesor w płytkę testową i podpinam na kabelki wyświetlacz i przyciski to co by nie robić procesor się nie zresetuje i wszystko działa pięknie. Zmieniałem program, nawet wrzuciłem program termometru z tej strony i owszem pokazuje tamperaturę, jednak przy stuknięciu lub dotknięci do masy procek się resetuje. Sprawdzałem na 3 procesorach i ciągle to samo. Moja diagnoza był prosta... skopana płytka i tyle. Więc dzisiaj od rana robię płytkę na nowo, układ nieco inny, ale to kosmetyczne zmiany. Druga płytka wyszla idealnie, bez żadnych podtrawień i zwarć. Jednak problem pozostał!!! Procesor tak samo się resetuje i nie potrafię temu zaradzić. Więc proszę Cie Mirku pomóż mi w moim problemie. Napewno masz większe doświadczenie i znasza zasady "sztuki" projektowania PCB.
Oto płytka:
http://zapodaj.net/a2234143263f.gif.html

A oto kod źródłowy:

$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B10011111
Portb = &B11111111
Config Portd = &B1111111
Portd = &B111111111
 
 
Dim Mux As Byte
Dim Sekjed As Byte
Dim Sekdzies As Byte
Dim Minjed As Byte
Dim Mindzies As Byte
Dim Godjed As Byte
Dim Goddzies As Byte
Dim Maxi As Byte
Dim Uniwers As Byte
 
 
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 256
Enable Interrupts
Enable Timer0
Enable Timer1
 
On Timer0 Co4ms
On Timer1 Co1s
 
Sekjed = 6
Sekdzies = 5
Minjed = 4
Mindzies = 3
Godjed = 2
Goddzies = 1
 
 
Do
Loop
End
 
 Co1s:
Timer1 = 18661
 
Incr Sekjed
Toggle Portb.0
 
Return
 
Co4ms:
 
'Obsługa przycisków:
 
Decr Uniwers
If Pinb.5 = 0 Then
   If Uniwers = 0 Then
      Uniwers = Maxi
      Incr Minjed
      Sekjed = 0
      Sekdzies = 0
      Maxi = Maxi - 8
      If Maxi < 8 Then Maxi = 8
   End If
End If
 
If Pinb.6 = 0 Then
   If Uniwers = 0 Then
      Uniwers = Maxi
      Incr Godjed
      Maxi = Maxi - 8
      If Maxi < 12 Then Maxi = 12
   End If
Else
If Uniwers = 0 Then
Uniwers = 4
Maxi = 100
End If
End If
 
'Liczenie czasu:
 
If Sekjed = 10 Then
   Sekjed = 0
   Incr Sekdzies
   End If
 
   If Sekdzies = 6 Then
   Sekdzies = 0
      Incr Minjed
      End If
 
      If Minjed = 10 Then
      Minjed = 0
      Incr Mindzies
              End If
 
         If Mindzies = 6 Then
         Mindzies = 0
            Incr Godjed
            End If
 
            If Godjed = 10 Then
            Godjed = 0
               Incr Goddzies
            End If
 
 
If Goddzies = 2 And Godjed = 4 Then
Goddzies = 0
Godjed = 0
End If
 
'Wyświetlanie:
 
Incr Mux
If Mux = 4 Then Mux = 0
   Portb.1 = 1
   Portb.2 = 1
   Portb.3 = 1
   Portb.4 = 1
Select Case Mux
Case 0:
   Portd = Lookup(minjed , Tabela1)
   Portb.1 = 0
   Portb.2 = 1
   Portb.3 = 1
   Portb.4 = 1
Case 1:
   Portd = Lookup(mindzies , Tabela1)
   Portb.1 = 1
   Portb.2 = 0
   Portb.3 = 1
   Portb.4 = 1
Case 2:
   Portd = Lookup(godjed , Tabela1)
   Portb.1 = 1
   Portb.2 = 1
   Portb.3 = 0
   Portb.4 = 1
Case 3:
   Portd = Lookup(goddzies , Tabela2)
   Portb.1 = 1
   Portb.2 = 1
   Portb.3 = 1
   Portb.4 = 0
End Select
 
Return
 
'Dane:
  Tabela1:
  Data 136 , 238 , 146 , 194 , 228 , 193 , 129 , 234 , 128 , 192
  Tabela2:
  Data 127 , 238 , 146




Portret użytkownika mirley

Re; Zegarek

A z czego zasilasz ten układ? Jaki masz zasilacz? procek nie ma na płytce żadnego kondensatora filtrującego zasilanie a powinien miec przynajmniej 100nF jak najbliżej nóżek zasilania. Masa jest strasznie długa pętlą pociągnięta od kwarca do procka, jednak stawiam na brak kondensatorów zasilających lub zły zasilacz? jakie masz dokładnie napięcie zasilania?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Konrad

zasilanie

Zmierzyłem napięcie zasilania. Było 5,48V, ale i tak musiałem dodać diode 1N4007 przed układem bo podłączyłem jeszcze zasilanie awaryjne i spadło na 4,95V wiec jest ok.
Dodałem kondensator 100nF i przewodem skróciłem pętle masy. Jak narazie jest wszystko dobrze. Układ pracuje poprawnie.

Dzięki za podpowiedź. Teraz będę pamiętał, żeby w każdym układzie z uC filtrować napięcie.
Pozdrawiam!

Portret użytkownika maro

Witam Posiada kolega do tego

Witam
Posiada kolega do tego zegara schemat?