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.
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
}
}
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.
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
Lesezeichen