Witam. Mam problem z prawidłowym odczytywaniem danych z eepromu atmega 8. Dzieje się to po kilkunastu startach procesora, zamiast np. 90 wskakuje mi 10 lub inne głupoty... do procka mam podłączony kwarc 8MHz z każdego +5V 100nF, reset podciągnięty do +5V przez 5,1k i kondensator 100nF do masy, fusy mam ustawione na CKOP = 0 , kwarc zewnętrzny czyli 111111, WDT always on.
kombinowałem już z zmianą adresów (większe odstępy bo myślałem że coś się nadpisuje), dałem już większe opóźnienia pomiędzy zapisem a odczytem i nic. używam wyświetlacza led , jeśli na samym starcie nacisnę menu (pinc.4) to się ładują. załączę i wyłączę kilkanaście razy i już głupoty, aha jeszcze mi się przestawia przelicznik adc 0,0025 na inny.
Oto fragment programu jak sobie wczytuje ustawienia początkowe:
Proszę Was o pomoc bo walczę już z tym 2 dni i nic
Post raportowany - poprawiłem tytuł.
[zumek]
kombinowałem już z zmianą adresów (większe odstępy bo myślałem że coś się nadpisuje), dałem już większe opóźnienia pomiędzy zapisem a odczytem i nic. używam wyświetlacza led , jeśli na samym starcie nacisnę menu (pinc.4) to się ładują. załączę i wyłączę kilkanaście razy i już głupoty, aha jeszcze mi się przestawia przelicznik adc 0,0025 na inny.
Oto fragment programu jak sobie wczytuje ustawienia początkowe:
Proszę Was o pomoc bo walczę już z tym 2 dni i nic
Code:
Led_1 Alias Portb.5
Led_2 Alias Portb.3
Led_3 Alias Portb.1
Led_4 Alias Portb.4
Led_5 Alias Portb.2
Led_6 Alias Portb.0
' LED A STEROWANY 0 PORTD.2
' LED B STEROWANY 0 PORTD.6
' LED C STEROWANY 0 PORTD.4
' LED D STEROWANY 0 PORTD.1
' LED E STEROWANY 0 PORTD.0
' LED F STEROWANY 0 PORTD.3
' LED G STEROWANY 0 PORTD.5
Config Timer0 = Timer , Prescale = 64
Enable Timer0
On Timer0 Prztimer0
Enable Interrupts
'uruchamiamy układ watchdog
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Config Watchdog = 1024 'reset wystąpi po 1s
Sw_port Alias Pinc
Buzzer Alias Portc.1
Praca Alias Portc.2
Buzzer = 0
Praca = 0
Licznik_wyjscia = 0
Poz_wysw = 1
Czas_pomiaru = 15
Flaga_histereza = 0
Flaga_obl_histerezy = 0
Kalibracja = 0
Starteep = 0
Waitms 500
If Pinc.4 = 0 Then
Temp_zal = 35
Temp_wyl = 70
Temp_alarm_1 = 90
Temp_alarm_2 = 90
Histereza = 3
Kalibracja_1 = 0
Kalibracja_2 = 0
Writeeeprom Temp_zal , 10
waitms 10
Writeeeprom Temp_wyl , 20
Waitms 10
Writeeeprom Temp_alarm_1 , 30
Waitms 10
Writeeeprom Temp_alarm_2 , 40
Waitms 10
Writeeeprom Histereza , 50
Waitms 10
Writeeeprom Kalibracja_1 , 60
Waitms 10
Writeeeprom Kalibracja_2 , 70
Waitms 10
End If
Readeeprom Temp_zal , 10
Waitms 10
Readeeprom Temp_wyl , 20
Waitms 10
Readeeprom Temp_alarm_1 , 30
Waitms 10
Readeeprom Temp_alarm_2 , 40
Waitms 10
Readeeprom Histereza , 50
Waitms 10
Readeeprom Kalibracja_1 , 60
Waitms 10
Readeeprom Kalibracja_2 , 70
Waitms 10
Start Watchdog
Do
'*********************************** ' co 4ms
If Flaga_2ms = 1 Then
Flaga_2ms = 0
Reset Watchdog
If Licznik_buzzer > 0 Then
Decr Licznik_buzzer
Buzzer = 1
Else
Buzzer = 0
End If
Gosub Wyswietlanie
Gosub Przyciski
End If
'*********************************** ' co 1 s
If Flaga_1s = 1 Then
Flaga_1s = 0
If Licznik_wyjscia > 0 Then
Decr Licznik_wyjscia
End If
If Poz_wysw <> 1 And Licznik_wyjscia = 0 Then ' wychodzenie z menu jeśli czas wyjścia = 0
Poz_wysw = 1
End If
Mig = Not Mig
If Czas_pomiaru < 20 Then 'ma być 20 s
Incr Czas_pomiaru
If Czas_pomiaru = 20 Then
Czas_pomiaru = 0
Gosub Pomiar
End If
End If
Gosub Sterowanie
End If
Loop
End
Post raportowany - poprawiłem tytuł.
[zumek]