-
        

Ergebnis 1 bis 6 von 6

Thema: 2 Byte empfangen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2006
    Beiträge
    11

    2 Byte empfangen

    Anzeige

    Hi

    Ich möchte über RS232 16 Bit (also 2 Byte) empfangen.

    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 9600
    '##########################
    
    
    '##########################
    '######### RS232 ##########
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
    '##########################
    
    Dim Befehl As Byte
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    Config Lcdbus = 4
    Cursor Off
    
    Do
    
    Loop
    
    Onrxd:
       Befehl = Udr
       Cls
       Lcd Befehl.9
    Return
    Ich möchte wie ihr seht mit der "Funktion" Befel.9 das 10te Bit auslesen.
    Empfangen werden aber max. 8 Bit also 1 Byte

    Wie mache ich es, dass es funktioniert?

    Marcel

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138
    hi,
    Vieleicht geht das ja mit INPUT wenn du Befehl als WORD hast wartet der AVR solange bis er ein Word grosse Variabele eingelesen wurde.
    Aber warum willst du nur ein Bit daraus auslesen.

    mfg

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2006
    Beiträge
    11
    HI

    Input braucht 2 Datenleitungen + GND
    Ich will/habe aber nur 1 Datenleitung + GND zur Verfügung.

    natürlich will ich mehrere Bit auslesen. das war jetzt nur ein Bsp.

    Marcel

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Du kannst technisch ja nur 8 Bit empfangen (8N1). Das 10. Bit, das du auslesen willst, ist ja das zweite Bit des zweiten Bytes.

    In Onrxd könntest du ja einen Zähler programmieren.

    Onrxd:

    Incr X

    If X=2 then
    Befehl=udr
    cls
    LCD Befehl.1
    X=0
    end if

    return

    Oder gleich
    LCD Udr.1
    Je nachdem, was ob du Befehl noch weiterhin brauchst oder nicht.
    Und vorrausgesetzt, das LCD Befehl.1 überhaupt geht.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2006
    Beiträge
    11
    Hi

    @Marco78
    das habe ich mir schon fast gedacht. deshalb bin ich auf fast die gleiche Idee gekommen. Trotzdem vielen Dank

    Marcel

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Also, UDh ast Befehl mal nur als Byte deklariert (DIM as byte), da kannste kein neuntes Bit und auch kein achtes auslesen, weil das in die Variable nicht rein passt.
    Du kannst die UART auch in 9n1 laufen lassen, für bestimmte Bus-Systeme wird das gerne verwendet um zu unterscheiden ob Daten oder Adressen übermittelt werden. Dafür gibts dann ein Register in der UART, wo die jeweiligen Bit dann drinn stehen, das nennt sich UCSRB, bzw. daraus das Bit RXB8.
    Das läuft dann in etwa so (Pseudocode):

    dim befehl as word at &Ha0
    dim highbyte as byte at &Ha1 overlay
    dim lowbyte as byte at &ha0 overlay

    isr:
    highbyte = ucsrb and &B00000001
    lowbyte = udr
    return
    end

    und schon haste 9 Bit in ner Wordvariable also 0 bis 512 als Datenwert.
    Aber 2 Byte sind das natürlich nicht, was ja die fragestellung war.

    Da geht das dann ähnlich, du brauchst dann nur ne Möglichkeit
    zu erkennen welches das erte Byte ist. das geht dann über

    a) ein Protokoll mit nem bestimmten Startbyte oder Endbyte oder 8.Bit, dann sinds also 3 Byte die rüber müssen bzw. einmal 9Bit, einmal 8 Bit
    b) einer Pause zwischen den übertragenen Werten, wo dann ein Timer ablaufen kann und zurücksetzt.

    bei a währs dann in etwa so:

    dim tempbyte as byte

    ISR:
    tempbyte = ucsrb and &B00000001
    if tempbyte=1 then
    highbyte= udr
    else
    lowbyte = udr
    endif

    end
    es wird also unterschieden ob bit 8 gesetzt, dann ists das highbyte der wordvariable oder eben nicht, dann ists der lowbyte der vasriable

    klar, dass für die aktion die USART auf 9n1 konfiguriert werden muss.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

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