Klingt seltsam. Der Code ist unverdächtig.
Irgendwas hat es wohl entweder mit dem Funk oder mit der VB Programmierung zu tun.
Hallo Leute!
Ich hoffe ich schreibe hier im richtigen Forum, aber ich finde einfach keines für eine Assembler Programmierung. Ich habe seit ein paar Monaten ein Projekt laufen in dem es darum geht einen Roboter über den PC mit Hilfe einer Funkübertragung zu steuern. Das funktioniert auch so halbwegs, aber ich verstehe nicht warum ich wenn ich mehrere Zeichen übertragen will immer warten muss (20ms) bis ich das nächste Zeichen übertragen kann. Ich sende mit 9600 Baud.
Hier ist Mal ein kurzer Programmausschnitt, in dem ich meine Nachricht dann übertrage:
(PS.: vielleicht kennt das schon jemand aus dem Tuturial von www.mikrocontroller.net)Code:serout: call delay_20ms sbis UCSRA,UDRE rjmp serout out UDR, temp ret
In temp befindet sich die Nachricht. Das call delay_20ms ruft ein Unterprogramm auf, das 20ms wartet. Ohne diesem Befehl bekomme ich dann im VB Programm nur den ersten Buchstaben richtig an. Ich würde es verstehen wenn es mit 5ms oder so auch funktionieren würde, aber das tut es nicht, kann mir das mal jemand erklären?
Ich freue mich auf eine baldige Antwort
Gerko
Klingt seltsam. Der Code ist unverdächtig.
Irgendwas hat es wohl entweder mit dem Funk oder mit der VB Programmierung zu tun.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
am VB Programm liegt es warscheinlich nicht, ich hab das nähmlich auch mit dem Programm getestet das beim Easyradio quasi dabei war, also das ER V2_03.exe. Mit diesem ist es ebenfalls nur der erste buchstabe der richtig ankommt. Aber was kann es mit dem Funk zu tun haben?, Ich verwende derzeit noch ein 8cm langes Drahtstück, aber ich kaufe bald eine Antenne. ist das möglicherweise der Grund dafür?
Würde ich allerdings ziemlich seltsam finden wenn das wirklich der Fall währe
mfg Gerko
Also jetzt ist einige Zeit vergangen seit ich das Übertragungsproblem habe, aber gelöst ist es noch immer nicht. Ich bin allerdings auf einen Fehler in meiner Schaltung gekommen (am ATMega16 auf PIN 30 also AVCC hatte ich keine Spannung), allerdings hat das auch nichts geändert. Ich habe mal gelesen das man für eine Funkübertragung eine genaue Frequenz braucht, also einen externen Quarz. Ich bin allerdings neu auf dem Gebiet und weiß nicht welche Fuses für was sind, daher meine Frage:
Wie kann ich den externen Quarz aktivieren?
Gerko
EDIT: Hab ich vergessen dazuzuschreiben, es handelt sich um einen 4MHz Quarz fals das jemandem weiterhilft
Also geklärt ist mein Problem immer noch nicht, BITTE HELFT MIR!
Derzeit habe ich:
Int. RC Osz. 4 Mhz; Start-up timer: 6CK+0ms [CKSEL=0011 SUT=00]
aktiviert.
Das dürte aber anscheinend irgend ein Interner Takt sein, und die sind ja angeblich nicht die genauesten (nicht ausreichend für eine Funkübertragung).
Ich weiß jetzt aber nicht was ich aktivieren muss, damit der externe und nicht der interne verwendet wird. Ich glaube es ist der
Ext. RC Osc. 3.0Mhz-8.0Mhz; Start-up timer: 18CK+0ms [CKSEL=0011 SUT=00]
Aber ist ein Quarz ein RC Oscillator, und was bedeutet 18CK+0ms?
Bitte um baldige Antwort, Gerko
Hallo Gerko,
der Schlüssel zur Lösung Deines Problems liegt wahrscheinlich in der Übertragungsgeschwindigkeit zum Easyradio Modul. Die Beschreibung sagt aus (Figure 6 Serial Data), dass die Übertragung beginnt, sobald der ER Puffer voll ist oder eine Übertragungslücke von 2 Byte ensteht. Wenn also der VB Overhead durch die Schleife mehr als 2 Byte Übertragungszeit beträgt, dann sendet das ER-Modul bereits das erste Zeichen und ignoriert oder verzögert die folgenden Zeichen.
Lösungsansatz: Alle zu übertragenden Zeichen in einen Puffer schreiben und in einem Rutsch an die serielle Schnittstellen übergeben.
Gruß
Hans-Peter
Lesezeichen