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
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.
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!
Witam Posiada kolega do tego
Witam
Posiada kolega do tego zegara schemat?