PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfsuchung, Daten empfange von WIFI-Modul as UART1



heylbly
19.12.2014, 09:30
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.


'********** 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.
29519
kann jemand mir ein bisschen Hilfe anbieten?

Unregistriert
19.12.2014, 11:24
kann jemand mir ein bisschen Hilfe anbieten?

heylbly
19.12.2014, 11:25
kann jemand mir ein bisschen Hilfe anbieten?

heylbly
22.12.2014, 23:05
OMG
ICH BIN WIRKLICH DRINGEND.
Ob jemand mir ein bisschen Tipps geben kann????????

Sauerbruch
23.12.2014, 10:45
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:




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




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.

Wieviele Zeichen sollen denn überhaupt am Stück übertragen werden? Vielleicht kannst Du das Projekt ja mal etwas detaillierter beschreiben?

heylbly
24.12.2014, 21:42
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:



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

es klappt auch nicht.

ich kann die Daten nicht auslesen.

Sauerbruch
25.12.2014, 09:33
Aber leider kann Bascom (http://www.rn-wissen.de/index.php/Bascom) den Befehl UDR oder UDR1 nicht erkennen.

Woran macht sich das denn erkennbar? Ich habe gerade mal versuchsweise folgenden Code in Bascom eingegeben:



$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



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.8) ist glaube ich definitiv nicht die neueste :-)

Was passiert denn genau, wenn Du Deinen Code kompilierst?