-         

Ergebnis 1 bis 9 von 9

Thema: Daten von Software UART nach Hardware UART weiterleiten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.07.2007
    Beiträge
    9

    Daten von Software UART nach Hardware UART weiterleiten

    Anzeige

    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?

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.07.2007
    Beiträge
    9

    also so funktioniert das nicht

    $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.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    27.07.2007
    Beiträge
    9
    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?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    dann stimmt die baudrate nicht oder der baudratenfehler ist zu groß
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    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
    _________________________________________________
    [-X Quis custodiet ipsos custodes
    Ground-Effect-Stability-Robot www.peter-holzknecht.de

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    27.07.2007
    Beiträge
    9
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •