-
        

Ergebnis 1 bis 10 von 10

Thema: Zeichenempfang RS232

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216

    Zeichenempfang RS232

    Anzeige

    Hallo,
    das nachfolgende Programm sendet mit etwa 1000Hz Messwerte des AD-Wandlers eines Mega8 an den PC. Hierbei gibt es auch noch keine Probleme. Jetzt würde ich aber gerne die Abtastfrequenz während des Programmlaufs durch Übermittlung eines Bytes ändern, was leider nicht funktioniert. Die Interruptroutine wird auf jeden Fall aufgerufen, aber der neue Wert wird scheinbar nicht übernommen, d.h. Value scheint immer gleich zu bleiben. Kann mir jemand helfen?


    Code:
    $regfile = "m8def.dat"
    $crystal = 3686411
    $baud = 115200                                              '9600
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    '3,686400MHz/8 = 460,8kHz -> 2,1701us
    Config Timer1 = Timer , Prescale = 8
    On Timer1 Ontimer:
    Enable Timer1
    
    Config Pinb.0 = Output
    
    
    On Urxc Onrts:
    Enable Urxc
    Enable Interrupts
    
    Dim Messwert As Word , Lbyte(2) As Byte At Messwert Overlay , L As Word
    Dim B As Byte , Value As Word , I As Word
    Value = 65000
    
    
    
    'Timer-Interrupt
    Ontimer:
        Timer1 = Value
        Messwert = Getadc(0)
        Printbin Lbyte(1) ; Lbyte(2)                            'Messwert an den PC senden
    Return
    
    'Interrupt für den Zeichenempfang
    Onrts:
        B = Udr
        L = B * 100                                             'max 255*100 = 25500
        Value = 65000 - L                                       '65000-25500 = 39500
        For I = 1 To 500
            Printbin B ; 0                                      'Wert eine Sekunde lang zurücksenden
            Waitms 2
        Next I
    Return
    
    
    End

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Da dürfte es um die Datentypen Byte/word gehen
    dreh das um:
    Code:
        L = Udr 
        L = L * 100                                             'max 255*100 = 25500 
        Value = 65000 - L                                       '65000-25500 = 39500
    sollte eigentlich gehen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Vielen Dank, werde es heute nachmittag ausprobieren...

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Aber wie sende ich dann das empfangene Zeichen zurück? Ich muss es doch als Byte vorliegen haben, nicht wahr?

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Gut, dann doch mit B
    Code:
        B = Udr 
        L = B
        L = L * 100                                             'max 255*100 = 25500 
        Value = 65000 - L                                       '65000-25500 = 39500 
    
      printbin b
    Wichtig ist, daß VOR dem multiplizieren der Wert auf ein word erweitert ist
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Alles klar, danke. Ich nehme mal an, es gibt in Bascom keine direkten Typumwandlungen per Funktion, also sowas wie L = cLng(B).

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Es gibt ein integer = makeint(lsb, msb), und solange die werte positiv sind, ist das integer ja auch ein word.
    Da du ja nur das lsb hast, reicht natürlich word = byte.
    Umgekehrt geht byte = word (<=255) da ja nur das LSB von Word gemoved (*pfff*) wird.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Allerdings ist eine Sache noch unklar: In dem am Anfang gezeigten Programm habe ich ja das empfangene Zeichen zurückgesendet. Ganz egal, was ich sende, ich bekomme immer einen Wert zwischen 50 und 53 zurückgesendet.

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    bei der Multiplikation B * 100 bleibt nur das LSB übrig, also eigentlich
    der 256 Rest (module 256). das können abenteuerlich Werte sein.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Du hast Recht, es wird wohl der Rest eines mehrfachen Überlaufs sein.
    Das wars erstmal, Danke Dir für die schnelle Hilfe!

Berechtigungen

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