übersetzt käm dann das dabei raus:
do
waitms 33.89
ir-led=1
waitms 13,89
ir-led=0
loop
sind dann irgendwas um 48 ms und das gibt 20,9 Hz
hallo leute,
ich bin gerade dabei, mir einen roboter zu bauen.
dieser soll immer geradeausfahren, nur wenn ein gegenstand im weg ist, soll er solange einen kreis drehen (wie ein panzer, links und rechts antrieb), bis er wieder ungehindert weiterfahren kann.
jetzt zu meinem problem:
ich benutze einen tsop1136 und eine ir-led zur objekterkennung, die ir-led will/muss/soll ich mit ungefähr 36kHz betreiben. am anfag wollte ich die 36 kHz (samt unterbrechung, für rc5) mit dem atmega32 realisieren, aber dieser gibt mir eine ganz andere frequenz aus?? ich hatte eine loop-schleife geschrieben, mit
do
waitms 20
ir-led = 1
waitus 13.89
ir-led = 0
waitus 13.89
loop
allerdings waren die high/low zeiten viel länger?!?!?!?!
jetzt habe ich das ganze mit einem ne555 realisiert, aber ich brauche ja (für rc5) immer nach 10 impulsen(?) eine unterbrechung, ....... deshalb habe ich mir gedacht, ich schließe einen bc548(reicht dieser für ca. 1kHz)
mit dem collector an die anode (-) der ir-led und den emiter an - der spannungsquelle, basis schließe ich an den ausgangspin des atmega32 an und die kathode der ir-led an den ausgangspin des ne555...
das funktioniert auch wunderbar, nur ich weiß nicht, wie ich zwei do-loop schleifen gleichzeitig betreiben kann?!?!?!?!?!
gruß
chris
P.S.: ich weiß, dass ein atmega32 dafür überdimensioniert ist, ich habe aber nur diesen.
übersetzt käm dann das dabei raus:
do
waitms 33.89
ir-led=1
waitms 13,89
ir-led=0
loop
sind dann irgendwas um 48 ms und das gibt 20,9 Hz
Vor den Erfolg haben die Götter den Schweiß gesetzt
seit wann ergibt den 20ms + 13,89µs = 33,89ms ???????????
Hallo CheGuevara,
Die Werte hinter Waitms und Waitus müssen ganze Zahlen zwischen 1 und 65535 sein.
Wie soll das gehen? Der Sprung geht immer vom erstbesten Loop zum letzten Do.das funktioniert auch wunderbar, nur ich weiß nicht, wie ich zwei do-loop schleifen gleichzeitig betreiben kann?!?!?!?!?!
Gruß, Michael
hallo michael,
danke für die infos.
ich habe jetzt statt waitus 13.89 waitus 14 eingegeben, und es funzt!
ich habe jetzt nur noch ein (für dich/euch) vielleicht leichtes problem:
ich benutzte im moment zwei atmega32, der eine sendet mit folgendem code:
$regfile = "m32def.dat"
$crystal = 16000000
Config Portd.0 = Output
Ou Alias Portd.0
Do
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Ou = 1
Waitus 14
Ou = 0
Waitus 14
Waitms 20
Loop
und der andere empfängt dies und steuert die motoren (einer links, einer rechts) mit folgendem code:
$regfile = "m32def.dat"
$crystal = 16000000
Config Porta.0 = Input
Config Portd.1 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Portc.6 = Output
Config Portc.7 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portd.0 = Output
Config Adc = Single , Prescaler = Auto
Config Portc.0 = Output
Config Portc.1 = Output
Ml1 Alias Portc.6
Ml2 Alias Portc.7
Mr1 Alias Portb.0
Mr2 Alias Portb.1
Vs Alias Porta.1
Gnd Alias Porta.2
Ine Alias Porta.0
Ou Alias Portd.0
Ou2 Alias Portd.1
Vs = 1
Gnd = 0
Ou2 = 0
Enable Interrupts
Dim X As Word
Do
Start Adc
X = Getadc(0)
If X > 500 Then
Ml1 = 1
Ml2 = 0
Mr1 = 1
Mr2 = 0
Elseif X < 500 Then
Ml1 = 0
Ml2 = 1
Mr1 = 0
Mr2 = 0
Waitms 500
End If
Loop
diese beiden codes sollte man doch auf einen atmega laden können, aber ich bin zu blöd dafür?!!!!!!
vielleicht könnte mir ja jemand tipps geben/helfen?!!!!
mfg
chris
@Che Guevara:
Am Empfänger sitzt ein TSOP1136???
Den kann man nicht analog einlesen oder was ist an Adc(0) angeschlossen?
Gruß Dirk
Hallo CheGuevara,
du mußt den Code erst compilieren und dann einen passenden Programmieradapter verwenden.diese beiden codes sollte man doch auf einen atmega laden können, aber ich bin zu blöd dafür?!!!!!!
vielleicht könnte mir ja jemand tipps geben/helfen?!!!!
Beantwortet das deine Frage?
Gruß, Michael
hallo dirk,
ja, empfänger ist ein tsop1136 und ... ja, man kann ihn analog einlesen, es funktioniert!! er ist an adc(0) angeschlossen.
@michael
ich glaube, du verstehst mich nicht?!!!!
ich möchte diese beiden codes im rechner (pc) zu einem zusammenfassen und dann diesen EINEN auf nur einen atmega draufladen?!!!!
mfg
chris
Hallo CheGuevara,
das ist neu, oben schreibst du nämlich:und dann diesen EINEN auf nur einen atmega draufladen
Zur Abstandsmessung hat Waste mal einen Beitrag geschrieben:ich benutzte im moment zwei atmega32, der eine sendet mit folgendem code:
und der andere empfängt dies
https://www.roboternetz.de/phpBB2/ze...ag.php?t=11114
Die prinzipielle Vorgehensweise erkennst du beim Lesen. Du mußt es nue noch auf Bascom portieren.
Gruß, Michael
sorry, war`n bisschen unverständlich...
warum kann ich den nicht einfach diese beiden loop schleifen aus meinen zwei codes hintereinander schreiben??
wenn ich das mache, funzt meistens nur eine und die andere wird überhaupt nicht beachtet?!!!!!
mfg
chris
Lesezeichen