Hallo
eigentlich arbeite ich nicht so viel mit µController im Zusammenhang mit Atmega Bascom aber ab und zu muss man über den Tellerrand schauen. Ich habe bereits hier gesucht aber auf anhieb nicht die richtige Antwort gefunden. Zu meinem Problem.
Die Aufgabenstellung ist einen Ultraschallsensor auslesen und den Wert auf ein Display auslesen. Einen Passenden Quellcode habe ich hier gefunden:
http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=4203&highlight=ultrasonic
Da dort mehr englisch gesprochen wird und der Beitrag recht alt ist stelle ich die Frage lieber hier.
Das ist der Quellcode aus dem Beitrag:
Ich möchte den Quellcode auf einen Atmega8 möglichst intern getaktet umschreiben und habe folgende Fragen:
welche Taktrate würdet Ihr nehmen?
wie berechne ich den Timer damit ich korrekte Werte ausgegeben bekomme?
Eventuelle kennt ja wer einen Beitrag der diesen Beitrag überflüssig macht.
Ich danke für Eure Mühe
Wolfgang
eigentlich arbeite ich nicht so viel mit µController im Zusammenhang mit Atmega Bascom aber ab und zu muss man über den Tellerrand schauen. Ich habe bereits hier gesucht aber auf anhieb nicht die richtige Antwort gefunden. Zu meinem Problem.
Die Aufgabenstellung ist einen Ultraschallsensor auslesen und den Wert auf ein Display auslesen. Einen Passenden Quellcode habe ich hier gefunden:
http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=4203&highlight=ultrasonic
Da dort mehr englisch gesprochen wird und der Beitrag recht alt ist stelle ich die Frage lieber hier.
Das ist der Quellcode aus dem Beitrag:
Code:
'(
Ping Program By Ex4(www.ex4.netfast.org)
Ping Input At Pinb.6
Lcd At Pinb.0 - Pinb.5
Uc = At90s2313
Xtal = 11059200 Hz
')
$crystal = 11059200
$regfile = "2313def.dat"
$hwstack = 32
$swstack = 16
$framesize = 16
'lcd setup
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
'timer setup
Config Timer1 = Timer , Prescale = 8 'timer step = 8/11059200 = 0.72338 us, overflow = 47.407 ms
Stop Timer1
'some var and const
Dim Tmr_val As Word
Dim Distance As Single
Const T_per_cm = 29.034 '1cm=29.034us
Main_prog:
Ddrb.6 = 1 'pinb.6 as output for ping
Portb.6 = 0 'low first
Start Timer1 'timer1 on
Cls
Cursor Off Noblink
Lcd "Distance : (cm) "
Locate 2 , 1
Lcd "0"
Do
Ddrb.6 = 1 'pinb.6 as output for ping
Portb.6 = 1 'high
Timer1 = 0 '5us delay
Do
Loop Until Timer1 >= 7
Portb.6 = 0 'make sure pinb.6=0
Ddrb.6 = 0 'pinb.6 as input for ping
Portb.6 = 1 'pull up on
Bitwait Pinb.6 , Set 'wait until a high respon from ping (holf off time)
Timer1 = 0 'reset timer1 value,ready to count timer elapsed
Bitwait Pinb.6 , Reset 'wait until a low respon from ping (distance time)
Tmr_val = Timer1 'copy timer1 value for distance measurement
Distance = Tmr_val * 8
Distance = Distance / 11.0592 'distance time coverage in uS
Distance = Distance / 2 'only 1 portion echo count
Distance = Distance / T_per_cm 'distance in cm
Locate 2 , 1 'erase lcd
Lcd Spc(16)
Locate 2 , 1 'display the distance
Lcd Distance
Waitms 1000 'wait about 1s
Loop
Ich möchte den Quellcode auf einen Atmega8 möglichst intern getaktet umschreiben und habe folgende Fragen:
welche Taktrate würdet Ihr nehmen?
wie berechne ich den Timer damit ich korrekte Werte ausgegeben bekomme?
Eventuelle kennt ja wer einen Beitrag der diesen Beitrag überflüssig macht.
Ich danke für Eure Mühe
Wolfgang