- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Problem mit Datenempfang über UART

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.02.2010
    Beiträge
    101
    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich hab das jetzt mal versucht umzusetzen. Leider ohne irgendeinen Erfolg. Es tut sich einfach nichts...
    Hab unten mal den aktuellen Code angehängt.
    Eigentlich soll folgendes funktionieren:
    Ich sende 4 Ziffern, bsp.:
    5049 (50 für PORTD.6 und 49 für "an")
    5050 (50 für PORTD.6 und 50 für "aus")
    5159 (51 für PORTD.7 und ...)
    Leider scheint bei der Übertragung so einiges nicht zu funktionieren. Ich verwende als UART-to-USB Converster ein mysmart USB MK II. Ich habe die RXD und die TXD Leitung angeschlossen und die Masse verbunden. Komischerweise hängt sich das Teil fast immer auf. Verbinde ich die Masse nicht passiert das nicht, aber dann bekomm ich für jedes gesendete Zeichen einen komischen Schnörkel zurück.

    Code:
    ' #############################################################
    ' #### USB-IO-plus
    ' #### by Jonathan Lorenz                          $PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.
    ' #### USBtoUART -> AVR
    ' #### Interface: GPIO, ADC, PWM, I2C, etc. (->Datasheet AVR)
    ' #############################################################
    ' #### empfange Anweisungen vom PC über USBtoUART
    ' #### setzen oder lesen der Pins
    ' #### Steuerung der Schnittstellen
    ' #############################################################
    ' #### getting instructions from PC over USBtoUART
    ' #### writing or reading the pins
    ' #### driving the Interfaces
    ' #############################################################
    ' #### Bascom-AVR IDE [1.11.9.8]
    ' #############################################################
    
    $regfile = "M8def.dat"                                      '.dat-file ATmega8'
    $crystal = 8000000                                          'Taktfrequenz 8MHz'
    $hwstack = 350                                              'Größe Hardwarestack'
    $swstack = 350                                              'Größe Softwarestack'
    $framesize = 200                                            'Größe Frame'
    
    $baud = 19200                                               'Baudrate UART
    
    
    
    'Tccr1a = &B10100010                                         'initialisieren der PWM-Frequenz 30,52 Hz bei 9 Bit
    'Tccr1b = &B10000010                                         'initialisieren der PWM-Frequenz 30,52 Hz bei 9 Bit
    
    
    'Declare Sub Empfang()
    Declare Sub Verarbeitung()
    Declare Sub Setzen()
    
    
    'Config Adc = Single , Prescaler = Auto , Reference = Avcc
    'Start Adc
    
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    
    
    Config Portd.6 = Output
    Config Portd.7 = Output
    Config Portb.0 = Output
    
    
    Dim I as Byte                                ' Splitting der Hauptschleife
    Dim Empfang_string As String * 10
    Dim Port As String * 10
    Dim Wert As String * 10
    Dim B_port As Byte
    Dim B_wert As Byte
    
    Dim Zaehler As Byte
    
    
    Portd.6 = 0
    Portd.7 = 0
    Portb.0 = 0
    Zaehler = 0
    
    
    Enable Interrupts                                           'Interrupts global zulassen
    Enable Urxc                                                 'Interrupt URXC einschalten
    On Urxc Empfangen                                           'Interrupt-Routine setzen
    
    
    Cls
    Cursor On Blink
    Lcd "USB-IO_plus"
    Waitms 150
    Locate 2 , 1
    Lcd "."
    Waitms 150
    Locate 2 , 2
    Lcd "."
    Waitms 150
    Locate 2 , 3
    Lcd "."
    Waitms 150
    Locate 2 , 4
    Lcd "initialisiert"
    
    
    ' #############################################################
    ' #### Hauptprogramm
    ' #############################################################
    
    Do
    '   Toggle Portb.0                                           'Blinkende LED zur Kontrolle des Programmdurchlaufes
    '   For I = 0 To 200
    '      Waitms 1
    '   Next I
    
    '   Empfang
    
    '   Verarbeitung
    
    '   Setzen
    Loop
    
    End                                                         'end program
    
    
    ' #############################################################
    ' #### UART Empfang
    ' #############################################################
    
    'Sub Empfang()
    '   If Ischarwaiting() = 1 Then
    '      Input Empfang_string
    '      If Zaehler < 3 Then
    '         Incr Zaehler
    '         Else
    '         Zaehler = 0
    '      End If
    '   Else
    '   !nop
    '   End If
    'End Sub
    
    ' #############################################################
    ' #### Datenverarbeitung
    ' #############################################################
    
    Sub Verarbeitung()
       Port = Left(empfang_string , 2)                          'Byte 1 und 2 extrahieren
       Wert = Mid(empfang_string , 3 , 2)                       'Byte 3 und 4 extrahieren
       B_port = Val(port)                                       'String zu Wert konvertieren
       B_wert = Val(wert)                                       'String zu Wert konvertieren
    End Sub
    
    ' #############################################################
    ' #### Ausgänge setzen
    ' #############################################################
    
    Sub Setzen()
       Select Case B_port                                       'zu setzenden Pin auswählen
          Case 50 : If B_wert = 49 Then                         '50=2 | 49=1
                         Portd.6 = 1
                     Elseif B_wert = 50 Then                    ' | 50=2
                         Portd.6 = 0
                     End If
          Case 51 : If B_wert = 49 Then                         '51=3 | 49=1
                         Portd.7 = 1
                     Elseif B_wert = 50 Then                    ' | 50=2
                         Portd.7 = 0
                     End If
          Case Else : !nop
       End Select
    End Sub
    
    
    ' #############################################################
    ' #### UART Interrupt
    ' #############################################################
    
    Empfangen:
    
      Empfang_string = Waitkey()                                'Zeichen aus dem Buffer einlesen
    
      Verarbeitung
    
      Setzen
    
      Toggle Portb.0
    
    Return
    
    ' #############################################################
    ' #### Stand 16|12|2011
    ' #############################################################

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Du wirst keinen String bekommen, sondern immer nur ein einzelnes Zeichen.
    Code:
     Empfang_string = Waitkey()
    Damit gibt's auch nix mit den nachfolgenden Stringbefehlen zu verarbeiten.
    Eine ISR soll so kurz wie möglich sein und nicht noch zwei weitere Subs aufrufen.
    Code:
    Empfangen:
      Empfang_string = Waitkey()                                'Zeichen aus dem Buffer einlesen
      Verarbeitung
      Setzen
      Toggle Portb.0
    Return
    Also Flag in der ISR setzen und per Hauptschleife darauf reagieren.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.02.2010
    Beiträge
    101
    Danke für den Hinweis! Da hätte ich eigentlich selber drauf kommen müssen... *schäm*
    Ich werd das nach Weihnachten mal umsetzen und dann hier wieder berichten!

    Bis dahin... und allen ein frohes Fest!!!

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Serieller Datenempfang C# / AVR-GCC
    Von shedepe im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 23.12.2010, 19:44
  2. Datenempfang über RS-232 mit VB2008
    Von rogerberglen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 09.11.2010, 10:35
  3. ATMega32 UART problem --> Problem gelöst
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 18:45
  4. Kommunikation über UART - Problem
    Von filth im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 06.09.2009, 17:16
  5. at90can development board - Datenempfang schlägt fehl
    Von Crash32 im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 19.06.2008, 23:03

Berechtigungen

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

12V Akku bauen