www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM: Empfang eines strings oder HEX-Wertes per UART


Autor: Henning Frers (sixpack1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ein paar Worte zu meinem vorhaben.
Ich möchte einen Integerwert von einem Atmega 16 (=Sender) zu einem 
Atmeg8 (=Empfänger) senden. Hierfür habe ich TXD vom Atmega16 mit RXD 
vom Atmega8 verbunden.
Auf der Empfängerseite möchte ich im Pollingbetrieb einen Puffer 
auslesen
und auswerten können. Dazu habe ich mir auch zwei kleine Testprogramme 
geschieben, dass Senden scheint zu funktionieren. Hab mal mit dem 
Oszilloskop am RXD Pin des Empfägers gemessen.
Ich mache irgendetwas bei der Empfangauswertung falsch. Nur was?
So langsam fange ich an zu verzweifeln.
Hat vieleicht einer von euch nen Tip.?
Hier mein Code:

Sender:

$regfile = "m16def.dat"
$crystal = 16000000                '16 MHz
$hwstack = 30
$swstack = 15
$framesize = 10
$baud = 9600

' $sim

'-------------------------------
 Ddrc = &B01110000
Portc = &B11101101
    'Pinc.76543210
'pinc.0 = Taste1

 Ddrd = &B00000011
Portd = &B11111111
'Pind.1 = TXD

Taste1 Alias Pinc.0
Taste2 Alias Pinc.1

'-- Config serial 
--------------------------------------------------------------

 Config Serialout = Buffered , Size = 2
 '----------------------------------------------------------------------- 
--------
  Enable Interrupts
  Dim Dataout As Integer

 '----------------------------------------------------------------------- 
--------

                      ' Beispielwert, später Werte zwischen 0 und 1250

    Do

    If Taste1 = 0 Then
       Dataout = 55
       Printbin Dataout            '
       Bitwait Taste1 , Set
    End If

    If Taste2 = 0 Then
       Dataout = 5
       Printbin Dataout            '
       Bitwait Taste2 , Set
    End If


    Loop
    End

Empfänger:
$regfile = "m8def.dat"
$crystal = 16000000                                          '16 MHz
$hwstack = 50
$swstack = 35
$framesize = 10
$baud = 9600
'$sim

 '-- Config serial 
Port---------------------------------------------------------

 'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , 
Databits = 8 , Clockpol = 0

 Config Serialin = Buffered , Size = 2
  Enable Interrupts
 '--- Config 
Port---------------------------------------------------------------

   Ddrd = &B00000000
   Portd = &B11111111
  'PinD.0 = RXD

    Ddrc = &B00100000
   Portc = &B11111100
'----------------------------------------------------------------------- 
--------
  Dim Datain As Integer            ' Buffer für Serielle Daten



  Do


    Datain = Udr

    If Datain = 55 Then            ' zum Testem
      Pinc.5 = 1
    Else
      Pinc.5 = 0
    End If



  Loop
  End

Gruß Sixpack1

Autor: Henning Frers (sixpack1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ein paar Worte zu meinem vorhaben.
Ich möchte einen Integerwert von einem Atmega 16 (=Sender) zu einem
Atmeg8 (=Empfänger) senden. Hierfür habe ich TXD vom Atmega16 mit RXD
vom Atmega8 verbunden.
Auf der Empfängerseite möchte ich im Pollingbetrieb einen Puffer
auslesen
und auswerten können. Dazu habe ich mir auch zwei kleine Testprogramme
geschieben, dass Senden scheint zu funktionieren. Hab mal mit dem
Oszilloskop am RXD Pin des Empfägers gemessen.
Ich mache irgendetwas bei der Empfangauswertung falsch. Nur was?
So langsam fange ich an zu verzweifeln.
Hat vieleicht einer von euch nen Tip.?
Hier mein Code:

Sender:

$regfile = "m16def.dat"
$crystal = 16000000                '16 MHz
$hwstack = 30
$swstack = 15
$framesize = 10
$baud = 9600

' $sim

'-------------------------------
 Ddrc = &B01110000
Portc = &B11101101
    'Pinc.76543210
'pinc.0 = Taste1

 Ddrd = &B00000011
Portd = &B11111111
'Pind.1 = TXD

Taste1 Alias Pinc.0
Taste2 Alias Pinc.1

'-- Config serial
--------------------------------------------------------------

 Config Serialout = Buffered , Size = 2
 '----------------------------------------------------------------------- 
--------
  Enable Interrupts
  Dim Dataout As Integer

 '----------------------------------------------------------------------- 
--------

                      ' Beispielwert, später Werte zwischen 0 und 1250

    Do

    If Taste1 = 0 Then
       Dataout = 55
       Printbin Dataout            '
       Bitwait Taste1 , Set
    End If

    If Taste2 = 0 Then
       Dataout = 5
       Printbin Dataout            '
       Bitwait Taste2 , Set
    End If


    Loop
    End

Empfänger:
$regfile = "m8def.dat"
$crystal = 16000000                                          '16 MHz
$hwstack = 50
$swstack = 35
$framesize = 10
$baud = 9600
'$sim

 '-- Config serial
Port---------------------------------------------------------

 'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 ,
Databits = 8 , Clockpol = 0

 Config Serialin = Buffered , Size = 2
  Enable Interrupts
 '--- Config
Port---------------------------------------------------------------

   Ddrd = &B00000000
   Portd = &B11111111
  'PinD.0 = RXD

    Ddrc = &B00100000
   Portc = &B11111100
'----------------------------------------------------------------------- 
--------
  Dim Datain As Integer            ' Buffer für Serielle Daten



  Do


    Datain = Udr

    If Datain = 55 Then            ' zum Testem
      Pinc.5 = 1
    Else
      Pinc.5 = 0
    End If



  Loop
  End

Gruß Sixpack1

Autor: hero (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich bin mir nicht ganz sicher og das einen Einfluss hat (bin 
anfänger) aber vllt liegt es daran das du 16Mhz quarz verwendest... hab 
nicht mehr gelesen... es gibt quartz die genau ein vielfacehs von den 
Baud raten sind und somit perfekte Baudraten erzeugen... jedoch müsstest 
du dann etwas am ATMega8 empfangen...

Autor: Joachim R. (bastelbaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal in deiner Empfangsroutine folgendes aus der BASCOM-Hilfe 
aus:

Do

  Datain = Ischarwaiting() ' wartet bis ein Zeichen da ist
  If datain = 1 Then  ' wenn dann eins da ist
    datain = Waitkey() ' lesen wir es ein
    Print "ASCII code " ; datain ; " from serial"
  End If
Loop

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.