Hallo,
Ich habe vor den srf05 ultraschall sensor an meinen Asuro zu bauen. Das hat mit Bascom auch schon wunderbar funktioniert aber mit c will es nicht so wie ich es möchte.
Der Timer müsste nach meinem Verständnis von 0 bis 256 zählen wenn das echo signal startet und wenn das Echo signal aufhört gibt der Timer seinen Wert an die Variable 'ergebnis'. Allerdings weiß ich das der timer wenn er die 256 erreicht hat wieder von 0 beginnt. Das ist wahrscheinlich auch der Grund warum ich wirre Werte von 0 bis 256 im Hyperterminal erhalte. Denn das Echo Signal kann ja länger anhalten als ein ?Overflow? des Timers. Ich hoffe mir kann jemand erklären wie ich feststellen kann wie häufig ein Overflow statt gefunden hat.Code:#include <stdlib.h> #include <stdio.h> #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> #include "asuro.h" int main(void) { Init(); uint16_t ergebnis; char buffer [20]; ergebnis = 0; while (1) { DDRC |= (1<<PC3); // PC3 Ausgang PORTC |= (1<<PC3); // PC3 High _delay_us(20); // warte 20 µSekunden PORTC &= ~(1<<PC3); // PC3 Low DDRC &= ~(1<<PC3); // PC3 Eingang while(!(PINC & (1<<PC3))); // tue solange PC3 nicht 1 ist nichts TCNT0 = 0; // setze Timer0 auf 0 TCCR0 = (1<<CS01); // starte timer Prescaler 8 while((PINC & (1<<PC3))); // tue solange PC3 auf 1 ist nichts TCCR0 = (0<<CS01); // Stoppe timer ergebnis = TCNT0; //setze Timerergebnis in Variable ergebnis SerPrint("\n\r Ergebnis: \n\r"); itoa(ergebnis, buffer, 10); //übersetze (int)ergebnis in ASCII SerPrint(buffer); //übertragung des Ergebnisses über RS232 _delay_ms(500); //warte 500ms } }
P.s.: Ich habe schon die Suche benutzt und auch code gefunden, aber jeder dieser codes funktionierte mit dem Timer im normalen Modus.
Ich hoffe ich habe jetzt nicht zu viel schwachsinn geschrieben
MfG Maxtronik








Zitieren


Lesezeichen