kann jemand mir ein bisschen Hilfe anbieten?
hallo, zusammen!!!!
ich schreibe eine kurze code, um die Daten von Wifi -modul aus UART1 zu empfangen, dann wird die Daten nach UART0 versendet und auf Bascom-Simulator anzeigen.
chips: atmega 324p zwei UART. UART1 mit Wifi Modul verbindet,
wenn etwas von Wifi Modul empfangt wird, dann wird LED1 leuchten.
Es funktioniert wenn, Mcu etwas von UART1 empfangt wird und Led1 leuchtet.
aber ich weiße nur, dass etwas schon herein kommen, leider kann ich die Daten nicht auf die Variable speichern und auf auf Bascom-Simulator anzeigen.
Es ist die Code.
Code:'********** Prozessoreinstellungen ********************************************* $regfile = "m324pdef.dat" 'Prozessortyp $crystal = 7372800 'Taktfreqwuenz $hwstack = 40 $swstack = 16 $framesize = 32 $baud = 9600 Config Portb.2 = Output Led1 Alias Portb.2 Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin0 = Buffered , Size = 254 Config Serialin1 = Buffered , Size = 254 Enable Interrupts Open "COM2:" For Binary As #1 Dim Incoming_data As String * 200 Dim A As Byte Dim C As String * 200 Set Led1 Do A = Ischarwaiting(#1) ' ueberpruefung, ob daten von Wifi Modul empfangt werden? If A = 1 Then 'erfolgreich empfangt wird. Gosub Empfangen End If If A = 0 Then Print A ; " " ; "keine Daten kommen hierein" End If Loop End Empfangen: Print A ; " " ; "daten kommen rein" Led1 = 0 'wenn etwas von Modul empfangt wird, dann wird LED1 leuchtet Input #1 , Incoming_data ' daten spreichern C = Incoming_data Print C 'daten auf Bascom-Simulator anzeigen Return
Praogramm lauft wie die folgend, wenn ich etwas von Handy nach Mcu versendet.
kann jemand mir ein bisschen Hilfe anbieten?
kann jemand mir ein bisschen Hilfe anbieten?
kann jemand mir ein bisschen Hilfe anbieten?
OMG
ICH BIN WIRKLICH DRINGEND.
Ob jemand mir ein bisschen Tipps geben kann????????
Hallo Heylbly,
mal sehen... mit gepuffertem UART-Empfang habe ich noch nie herumgspielt, aber vielleicht finden wir ja eine Lösung.
Versuch doch als erstes mal, Dir direkt das UART-Empfangsregister anzeigen zu lassen, wenn der Controller etwas empfangen hat.
Es sieht so aus, als würdest Du die UART1-Schnittstelle verwenden (also über Pin Nr. 16 des Controllers empfangen), und dann wäre das Empfangsregister UDR1.
Ich würde auch (erstmal) den Sprung ins Unterprogramm weglassen, um den Code so einfach wie möglich zu machen. Konkret also so:
Dann siehst Du an der Variablen X schon mal, WAS überhaupt empfangen wird. Wenn der Zahlenwert von X dann dem Dezimalwert des gesendeten Zeichens entspricht (siehe ASCII-Tabellen!), kannst Du den Wert in eine String-Variable kopieren, und dann hast Du das gesendete Zeichen.Code:Dim X as Byte .. Do A = Ischarwaiting(#1) If A = 1 then X = UDR1 Print X Else Print "keine Daten kommen herein" End if Loop
Wieviele Zeichen sollen denn überhaupt am Stück übertragen werden? Vielleicht kannst Du das Projekt ja mal etwas detaillierter beschreiben?
hallo, Sauerbruch,
zuerst vielen Dank für Ihre Tipps.
also, Anfangen meines Projekts brauche ich ungefahr 20 byte Daten zwischen Mcu und Handy auszutauschen. das kann String oder irgendwas. hier versuche ich eine String.
ich benutze UART1 für Wifi Modul, dann werden die Empfangesdaten von Handy in PC (UART0) weiterleiten.
es klappt jetzt, wenn ich etwas , zum Beispiel eine String von Pc versendet, dann kann mein Handy die String erfolgreich empfangen.
aber wenn ich etwas von Handy versendet, Mcu kann die Daten empfangen, aber es klappt nicht, dass die Daten von Mcu ausgelesen werden.
ich habe Ihre Code einmal zu versuchen.
Aber leider kann Bascom den Befehl UDR oder UDR1 nicht erkennen. Weiße ich nicht genau warum.
ich habe die Code ein bisschen geändert wie folgende:
es klappt auch nicht.
Dim X as String
Dim Y as String*20
..
Do
A = Ischarwaiting(#1)
Y=""
If A = 1 then
X = inkey(#1)
Y=Ý+chr(x)
print Y
Else
Print "keine Daten kommen herein"
End if
Loop
ich kann die Daten nicht auslesen.
Woran macht sich das denn erkennbar? Ich habe gerade mal versuchsweise folgenden Code in Bascom eingegeben:Aber leider kann Bascom den Befehl UDR oder UDR1 nicht erkennen.
Das entspricht vor der Do-Loop-Schleife genau Deinem Code, aber bei mir nimmt Bascom den Befehl A = UDR1 problemlos an. Und meine Bascom-Version (1.11. ist glaube ich definitiv nicht die neuesteCode:$regfile = "m324pdef.dat" 'Prozessortyp $crystal = 7372800 'Taktfreqwuenz $hwstack = 40 $swstack = 16 $framesize = 32 $baud = 9600 Config Portb.2 = Output Led1 Alias Portb.2 Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin0 = Buffered , Size = 254 Config Serialin1 = Buffered , Size = 254 Enable Interrupts Open "COM2:" For Binary As #1 Dim Incoming_data As String * 200 Dim A As Byte Dim C As String * 200 Set Led1 Do A = UDR1 loop
Was passiert denn genau, wenn Du Deinen Code kompilierst?
Lesezeichen