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
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
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...
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.