Nie umiem odczytać temperatur z ds18b20. Rezystor podciągający jest(4.7k), VDD i GND też są podłączone. Linia danych podpięta jest pod pb.7
Aha wyświetliłem sobie też wartości odczytanych bajtów, zarówno 1szy jaki drugi mają wartość 0xFF.
podaję kod może koś znajdzie błąd.
Aha wyświetliłem sobie też wartości odczytanych bajtów, zarówno 1szy jaki drugi mają wartość 0xFF.
podaję kod może koś znajdzie błąd.
Dim Cyfra(10) As Byte
Cyfra(1) = &B00000101
Cyfra(2) = &B11011101
Cyfra(3) = &B01000110
Cyfra(4) = &B01010100
Cyfra(5) = &B10011100
Cyfra(6) = &B00110100
Cyfra(7) = &B00100100
Cyfra(8) = &B01011101
Cyfra(9) = &B00000100
Cyfra(10) = &B00010100
Ddrc = &HFF;
Ddra = &HFF;
'Timer0 będzie odmierzał dokładnie 1 sekundę 8MHz/64/250/500 = 1 sekunda
$crystal = 80000000 'częstotliwo.ć taktowania mikrokontrolera
Config Timer0 = Timer , Prescale = 64 'deklaracja timera jako czasomierza 'z prescalerem 64
Config 1wire = Portb.7 'konfiguracja magistrali 1wire
On Timer0 Przerwanie_co_2ms 'deklaracja jaka etykieta obsługuje 'przepełnienie od timer0
On Int0 Przerwanie
Dim Licznikled As Integer 'zmienne licznikowa
Dim Licz As Integer
Dim Iiii As Integer
Dim T As Integer
Dim Pom As Integer
Dim B1 As Single,
Enable Interrupts 'odblokowanie globalnych przerwań
Enable Timer0 'odblokowanie przerwania od przepełnienia timer0
Timer0 = 6 'wpisanie warto.ci początkowej 6 do timera,
'czyli timer będzie zliczał 250 (256-6) impulsów
Licznikled = 0 'wyzerowanie zmiennej licznikowej
Enable Interrupts ' zezwolenie na obsługę przerwań
Enable Int0
Enable Interrupts
Enable Timer0
Do
Disable Interrupts
1wreset
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Enable Interrupts
Waitms 750
Disable Interrupts
1wreset
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read
B1 = 1wread(2) 'odczyt z termometru
T = B1
T = T * 10
T = T \ 16
T = T \ 10
Iiii = T
Enable Interrupts
Waitms 250
Waitms 250
Waitms 250
Waitms 50
Disable Interrupts
Loop
End 'koniec programu
Przerwanie_co_2ms: 'podprogram przerwania od przepełnienia timer0 wywolywanego co 2 ms
Counter0 = Counter0 + 6 'ustawienie początkowej warto.ci timera0 poprzez
'dodanie do niego warto.ci 6 (odliczone zostanie
'dokładnie kolejne 250 impulsów)
Incr Licznikled 'zwiększenie licznika
Incr Licz
If Licznikled = 1 Then
Porta = &B11111110 'najbardziej znacząca cyfra
Pom = Iiii Mod 1000
Pom = Pom / 100
Portc = Cyfra(pom + 1);
End If
If Licznikled = 3 Then
Porta = &B11111101
Pom = Iiii Mod 100
Pom = Pom / 10
Portc = Cyfra(pom + 1);
End If
If Licznikled = 5 Then
Porta = &B11111011
Pom = Iiii Mod 10
Portc = Cyfra(pom + 1);
End If
If Licznikled = 7 Then
Licznikled = 0 'wyzeruj zmienną licznikled
End If
Return 'powrót z przerwania
Przerwanie:
' Incr Iiii
Return