PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten von Software UART nach Hardware UART weiterleiten



kusli
04.10.2008, 17:12
Hallo
Ich hab volgendes Problem:
Ich hab einen Atmega32 der einen Hardware Uart hat mit einem max232 und einen Sofware Uart der an einem speziellem RX-Funkmodul hängt.
mit dem Atmega stelle ich die Frequenzen ein und sollte nach den einstellungen die Datenen 1:1 weiterleiten an den Harware Uart. Alles klappt so weit nur das 1:1 weiterleiten der der Empfangenen Daten will nicht so recht.
Hat jemand einen Tip oder anregung wie ich das lösen könnte?

PicNick
04.10.2008, 18:51
Eigentlich müsstest du ja nur jedes mit der Soft-Uart empfangene Byte mit "print" über der HW- ausgeben.
Fürchte, du hast da irgendeinen Knopf in dein Programm eingebaut.
Am besten, du zeigst deinen Code mal her.

kusli
04.10.2008, 19:10
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 10
$framesize = 60
$baud = 2400

Open "comc.7:2400,8,n,1" For Output As #1
Open "comc.0:2400,8,n,1" For Input As #2

Config Lcd = 16 * 2 'Lcd
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.0 , Rs = Porta.0
Config Lcdbus = 4 'Lcd Bus
Cursor Off

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc 'ADC Gonfig



Dim Daten As Byte

Do
Daten = Inkey(#2)
Print Daten
Loop

Irgendwie sehen die Daten dann ganz anders aus als wenn ich sie direkt empfange.
Habe auch schon waitkey ausprobiert mit dem selben Ergebnis.

Vitis
05.10.2008, 09:16
da ist der fehler:

Daten = Inkey(#2)
Print Daten

print daten interpretiert bascom als gebe den zahlenwert des
empfangenen byte-zeichens aus.

printbin löst die chauce oder print chr(daten); geht auch.

kusli
05.10.2008, 17:57
Also daran hat es nicht gelegen. hab die Daten mal im Terminal Programm
angeschaut und die Originalen Daten bestehen aus 17 komischen Zeichen (Strich,Strich,Strich,Strich,Gesicht,o mit Dach,@,A mit o obendrauf,und 8xHäuschen) die es auf keiner Tastatur gibt.
Hab die ganzen empfangenen Bytes schon in eien String gepakt usw.usw. Ich kann die Daten einfach nicht so umwandeln dass es annähernd ähnliche zeichen gibt.
Weiss jemand wie man zu solchen Zeichen kommt?

Vitis
05.10.2008, 22:34
dann stimmt die baudrate nicht oder der baudratenfehler ist zu groß

Vitis
06.10.2008, 08:53
ach so, inkey kann auch 0 sein wenn nix eingeht,
der Befehl der Wahl währe waitkey. is halt nur doof, dass
der Programmablauf dann dort steht.
Ich habs mit softuart mal so gelöst,
dass ich die auf nen Interrupteingang (INT0) gelegt hab
und hab dann so interruptbasierend die softuart
reinbekommen. Und halt wie gesagt, Baudrate
prüfen, baudratenquarz und fuse für clocksource
auf ext crystal

holzi
06.10.2008, 16:53
Statt Print Daten solltest Du unbedingt ein Print #1,Daten machen, damit Bascom auch weiss, wohint der Output gehen soll.
Der Syntax für den Print-Befehl lautet

PRINT [#channel , ] var ; " constant"


Peter

kusli
06.10.2008, 21:24
Also hab die daten mal angeschaut und es wird volgendes in Hex gesendet:
16 16 16 16 02 E2 40 87 00 00 00 00 7F 7F 7F 7F 7F 7F 7F 7F 2F AD
Die Markierten Zahlen ändern sich nie.

nun Probierte ich es einfach mal so:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 1200
Open "comc.0:1200,8,n,1" For Input As #2
Dim Daten0 As Byte
Dim Daten1 As Byte
Dim Daten2 As Byte
Dim Daten3 As Byte
Dim Daten4 As Byte
Dim Daten5 As Byte
Dim Daten6 As Byte
Dim Daten7 As Byte
Dim Daten8 As Byte
Dim Daten9 As Byte
Dim Daten10 As Byte
Dim Daten11 As Byte
Dim Daten12 As Byte
Dim Daten13 As Byte
Dim Daten14 As Byte
Dim Daten15 As Byte
Dim Daten16 As Byte
Dim Daten17 As Byte
Dim Daten18 As Byte
Dim Daten19 As Byte
Dim Daten20 As Byte
Dim Daten21 As Byte
Dim Daten22 As Byte
Dim Daten23 As Byte


Do
Cls
Daten0 = Inkey(#2)
If Daten0 = 2 Then
Daten1 = Waitkey(#2)
Daten2 = Waitkey(#2)
Daten3 = Waitkey(#2)
Daten4 = Waitkey(#2)
Daten5 = Waitkey(#2)
Daten6 = Waitkey(#2)
Daten7 = Waitkey(#2)
Daten8 = Waitkey(#2)
Daten9 = Waitkey(#2)
Daten10 = Waitkey(#2)
Daten11 = Waitkey(#2)
Daten12 = Waitkey(#2)
Daten13 = Waitkey(#2)
Daten14 = Waitkey(#2)
Daten15 = Waitkey(#2)
Daten16 = Waitkey(#2)
Daten17 = Waitkey(#2)
Daten18 = Waitkey(#2)
Daten19 = Waitkey(#2)
Daten20 = Waitkey(#2)
Daten21 = Waitkey(#2)
Daten22 = Waitkey(#2)
Daten23 = Waitkey(#2)

'usw....
Printbin Daten1 ; Daten2 ; Daten3 ; Daten4 ; Daten5 ; Daten6 'usw.....
End If

Loop

Dies klappt zu 50% einzelne Zahlen in der Mitte stimmen einfach nicht
](*,)