Witam!
Od kilku dni siedze i nie mogę nic wymyśleć
Bez ogrudek - podaje źródło:
Jest to część znacznie większego programu.. Wiele razy w rożnych projektach korzystałem z T1 jako źródła przerwań, ale nigdy nie było takich jaj.. Efekt jest teraz taki ze kilka razy (na oko patrząc na diodę) przerwanie idzie ok, potem zaczyna jakby przyspieszać do takiego stopnia ze zaczyna pulsować bardzo szybko poczym program się wywala i ustawia prawie wszystkie zmienne w programie na max wartość (np. bajt 255). Wygląda to tak jakby się zapętlały przerwania.. Ale chyba 2s starczy na odczytanie z DS18B20 temperatury i przeliczenie jej... Śmiechu warte normalnie.. Jak w podprogramie przerwana jest tylko zmiana stanu diody to częstotliwość jej migania jest ok. Gdy wyłączę linie przeliczania temp (T=T/16) program jakby się wyrabiał, ale raz kiedyś tez się wysypie... O co chodzi - może ktoś wie?
Pozdrawiam
Piotr
Od kilku dni siedze i nie mogę nic wymyśleć
Bez ogrudek - podaje źródło:
$regfile = "m16def.dat"
$crystal = 8000000
'definiowanie zmiennych i stałych
Dim T As Integer
Dim Licznik_przerwan As Byte
Dim Dioda As Bit
'konfigurowanie interfejsu 1Wire
Config 1wire = Portd.1
'konfiguracja wyświetlacza
Config Lcdpin = Pin , Db4 = Portc.6 , Db5 = Portc.5 , Db6 = Portc.4 , Db7 = Portc.3 , E = Portc.7 , Rs = Porta.7
Config Lcd = 16 * 2
Cursor Off
Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 'znak stopnia
Deflcdchar 1 , 16 , 24 , 28 , 30 , 31 , 31 , 31 , 32
Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 17 , 27 , 32
Deflcdchar 3 , 1 , 3 , 7 , 15 , 31 , 31 , 31 , 32
Cls
'konfiguracja Timer1 jako czasonierza
Config Timer1 = Timer , Prescale = 256
On Ovf1 Timer_przerwanie
Enable Ovf1
Load Timer1 , 62500
Enable Interrupts
'określanie końcówek jako wejścia
Config Pind.6 = Output
Led Alias Portd.6
Do
Loop
Timer_przerwanie:
Reset Led
Load Timer1 , 62500
Incr Licznik_przerwan
Lcd Licznik_przerwan
If Licznik_przerwan = 1 Then
1wreset
1wwrite &HCC
1wwrite &H44
End If
If Licznik_przerwan = 2 Then
1wreset
1wwrite &HCC
1wwrite &HBE
T = 1wread(2)
T = T / 16
Licznik_przerwan = 0
Cls
End If
Set Led
Return
end
Jest to część znacznie większego programu.. Wiele razy w rożnych projektach korzystałem z T1 jako źródła przerwań, ale nigdy nie było takich jaj.. Efekt jest teraz taki ze kilka razy (na oko patrząc na diodę) przerwanie idzie ok, potem zaczyna jakby przyspieszać do takiego stopnia ze zaczyna pulsować bardzo szybko poczym program się wywala i ustawia prawie wszystkie zmienne w programie na max wartość (np. bajt 255). Wygląda to tak jakby się zapętlały przerwania.. Ale chyba 2s starczy na odczytanie z DS18B20 temperatury i przeliczenie jej... Śmiechu warte normalnie.. Jak w podprogramie przerwana jest tylko zmiana stanu diody to częstotliwość jej migania jest ok. Gdy wyłączę linie przeliczania temp (T=T/16) program jakby się wyrabiał, ale raz kiedyś tez się wysypie... O co chodzi - może ktoś wie?
Pozdrawiam
Piotr