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.