Hallo zusammen !!!!
Ich möchte das Luftdruckmodul HP03 von Hope RF (bei Pollin bestellt) auslesen. Es werden die Temperatur, der Luftdruck und weitere 11 Koeffizienten ausgelesen. Temperatur, Luftdruck, und 7 Koeffizienten sind 16 bit Wörter. Die restlichen Koeffizienten sind 8 bit Wörter. Die Koeffizienten sind, mit Ausnahme von den beiden C4 und C7 im Rahmen der Vorgaben lt. Datenblatt. Bei der Temperatur bekomme ich überhaupt nur `0` als ergebnis. Wenn ich nun mit den Werten die Temperatur, bzw. den Luftdruck berechne (Zur Probe in einem Excel-Formular) kommt alles andere als nur annäherd ein richtiges Ergebnis heraus. Ich vermute, dass die ergebnisse zwar im Rahmen sind, aber vielleich noch nicht die richtigen. Da dieser Baustein neben dem SCK, und dem SDA noch einen seperaten Tackt (MCLK) mit 32 kHz benötigt, habe ich diesen an den PB1 angeschlossen, und einen Tackt mit einen Timer generiert. Leider habe ich keine Möglichkeit diesen mit einem Messgerät zu kontrollieren. Vieleich kann einer von euch meine Rechnung und die Einstellungen des Timer kontrollieren, ob ich da wirklich einen Tackt von ca. 32 kHz erhalte.
An meinem Prozessor ist ein Quarzoszillator mit 4Mhz angeschlossen. Bei 32kHz soll der Ausgang (PB1) 32 000 mal High, und 32 000 mal Low geschalten werden. Als 64 000 mal den Zustand ändern. Der Quarzoszillator gibt 4 000 000 Tackte in der Sekunde vor. Benötigt werden aber nur 64 000. Deshalb habe ich die 4 000 000 mit 64 000 dividiert, und bin auf ein Ergebniss von 62 gekommen. Deshalb lasse ich den Timer alle 62 Tackte (0x3E) den Zustand des PB1 (High oder LOW) ändern. Liege ich mit dieser Rechnung richtig ?? Erhalte ich wirklich einen Tackt von ca 32 kHz.
Zur Kontrolle auch noch der Programmteil für den Timer:
Für den Teil mit icr... und ocr.. habe ich leider keine Erklätung. Ohne diese Einstellungen wird der Ausgang nicht geschalten. Das habe ich zwar nach einigem Probieren gefunden, kann aber leider nicht sagen Warum.Code:ldi temp1,HIGH(RAMEND) ;Stackpointer Initialisieren out SPH,temp1 ldi temp1, LOW(RAMEND) out SPL,temp1 main: ldi temp1,(1<<COM1A0) |(1<<FOC1A) ;csoo setzen:Teiler 1; out TCCR1A,temp1 ldi temp1, 1<<WGM12 | 1<<CS10 ;CS10--> Vorteiler 1 für den Timer 1 out TCCR1B,temp1 ldi temp1, 0x6f out icr1h,temp1 ldi temp1,0xff out icr1l, temp1 ldi temp1, 0x00 out ocr1ah,temp1 ldi temp1,0x3E ;Den Timer nur bis 3E (62) Zählen lassen out ocr1al, temp1
Danke vorerst für die Hilfe.
Spitfire







Zitieren


Lesezeichen