BASCOM: Empfang eines strings oder HEX-Wertes per UART

OP #1623686
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
OP
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
Gast
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.