Układ wygląda tak:
1. AT Mega 16 - taktowany wewnętrznym oscylatorem
2. DS1307 - zegar na I2C , przerwanie z niego na INT0, ustawione przerwanie co 1s
3. 4 x DS18B20 na 1wire - Portc.2
4. LCD 2 x 16 - na Portb
I teraz tak - ma pusta pętlę, co 1s wywołuje przerwanie i wykonuje kolejno:
1. Pierwsze wywołanie przerwania
- odczyt z zegara
- wysyłam do czujników instrukcję do pomiaru
- wyświetlam godzinę na LCD
2. Drugie wywołanie
- odczyt z zegara
- odczytuje zmierzona temp. z 4 czujników
- wyświetlam godzinę na LCD
3. tj punkt 1
4. tj punkt 2
5. itd
Program wywala się na odczycie temperatury, ale jak robię to samo w pętli (wyłączone przerwanie) to wszystko gra jak należy.
Co tu jest nie tak ? Może ktoś się już spotkał z takim problemem. Na początku myślałem że I2c zakłóca mi 1-wire ale okazał się że to na odwrót i po małej korekcie w odczycie z I2C jest OK (przywracanie stanu końcówek SDA i SCL na początku transmisji).
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięProblem z DS18B20 i zewnętrznym przerwaniem ....
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Właśnie odkryłem ciekawostkę: jak podłączę czujniki po wystartowaniu programu to jest wszystko OK, cuda niewidy po prostu
Sposobem diody doszedłem co jest nie tak, i mam pytanie czym się różni:
x= 1wread()
od
x = 1wread(1)
Bo jak jest 1wread(1) to przechodzi ten moment ale niewiadomo dlaczego zmienia mi wartości niektórych zmiennych na jakieś dziwne liczby ??
Sposobem diody doszedłem co jest nie tak, i mam pytanie czym się różni:
x= 1wread()
od
x = 1wread(1)
Bo jak jest 1wread(1) to przechodzi ten moment ale niewiadomo dlaczego zmienia mi wartości niektórych zmiennych na jakieś dziwne liczby ??
Ze stosem popróbuję wieczorem ale w nocy zauważyłem jeszcze jedna rzecz. Mam procedurę wybierającą przemiennie: zapis czujników / odczyt temperatury. Wygląda to tak:
Int_0:
Select Case A
Case 0 : Gosub Temp_go
Case 1 : Gosub Temp_read
End Select
Toggle A
Return
Temp_go i Temp_read - etykiety obsługujące czujniki temp.
ale jak napiszę tak:
Int_0:
Gosub Wybor
Return
Wybor:
Select Case A
Case 0 : Gosub Temp_go
Case 1 : Gosub Temp_read
End Select
Toggle A
Return
czyli podwójny skok, to wykonuje się wszystko jak należy.
W pierwszym przypadku wywala się jak już ma odczytać 2 bajty z pierwszego czujnika (LSB i MSB temperatury)
Nie rozumiem tego kompletnie, czyżby Bascom miał jakieś kłopoty z wykonywaniem skoków ??
Int_0:
Select Case A
Case 0 : Gosub Temp_go
Case 1 : Gosub Temp_read
End Select
Toggle A
Return
Temp_go i Temp_read - etykiety obsługujące czujniki temp.
ale jak napiszę tak:
Int_0:
Gosub Wybor
Return
Wybor:
Select Case A
Case 0 : Gosub Temp_go
Case 1 : Gosub Temp_read
End Select
Toggle A
Return
czyli podwójny skok, to wykonuje się wszystko jak należy.
W pierwszym przypadku wywala się jak już ma odczytać 2 bajty z pierwszego czujnika (LSB i MSB temperatury)
Nie rozumiem tego kompletnie, czyżby Bascom miał jakieś kłopoty z wykonywaniem skoków ??
Cześć
1wread( 1 ) , ta 1 to ilość bajtów do odczytania z magistrali.
Popatrz na :
http://avrhelp.mcselec.com/bascom-avr.html?1WREAD
jest tam przykład
Pozdrawiam
1wread( 1 ) , ta 1 to ilość bajtów do odczytania z magistrali.
Popatrz na :
http://avrhelp.mcselec.com/bascom-avr.html?1WREAD
jest tam przykład
Pozdrawiam
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 41 gości