PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Soft-Uart - Intergerzahlen ohne ext. Quarz übermitteln



#fritz#
10.10.2011, 12:14
Ich möchte einen Atmega 8 und einen Atmega 16 seriell über Soft-Uart verbinden.
Beide laufen mit 8 Mhz. Ein externer Quarz ist nicht vorhanden.
Während der Versuche habe ich die Baudrate bis auf 300 reduziert.
Am Ergebnis hat sich nichts geändert.
Scheinbar werden Daten emfangen.
Eine Auswertung für die „4“ im nachfolgenden Code erfolgt aber nicht.

Sender - Atmega 16 -:

For X = 1 To 6
Open "comd.7:300,8,n,1," For Output As #1
Print #1 , X
Waitms 500
Print #1 , 0
Waitms 500
Close #1
Next X


Empfänger -Atmega 8-:

Open "comc.3:300,8,n,1," For Input As #2

Eingangseriell = Inkey(#2)

If Eingangseriell = 4 Then Led1 = 1 Else Led1= 0
If Eingangseriell <> 0 Then Led2 = 1 Else Led2 = 0


Led 2 blinkt im Halbsekundentakt, also werden Daten empfangen.
Led1, welche die „4“ auswerten soll, bleibt aus.

Im Netz liest man oft, dass bei serieller Übertragung ein ext. Quarz notwendig ist, andere behaupten, dass es bei genügend hoher Taktfrequenz des Atmega funktioniert.

Liegt es am fehlenden Quarz, den ich nur sehr schwer nachrüsten kann, weil alle Pins belegt ?

Oder muß ich die Zahlen anders übermitteln ?
Später sollen Zahlen zwischen 1 und 10 000 als Integer übertragen werden.

Ich bin auch mit sehr niedrigen Baudraten zufrieden. Hauptsache es funktioniert.
Wie weit kann man die Baudrate reduzieren ?

radbruch
10.10.2011, 13:45
Hallo

Vielleicht stört das Öffnen und Schliesen der Schnittstelle in der Schleife?


Open "comd.7:300,8,n,1," For Output As #1
For X = 1 To 6
Print #1 , X
Waitms 500
Print #1 , 0
Waitms 500
Next X
Waitms 500
Close #1


Der Verdacht dahinter: Vielleicht schafft es Bascom nicht das Zeichen innerhalb der Waitms 500 abzusenden?
(Das Senden der 10 Bits sollte bei 300 Baud allerdings nur 0,033 Sek. dauern)


Die Geschwindigkeit von COM-Verbindungen gibt man in Bit/Sekunde oder Baud an. 14.400 Baud bedeutet, dass 14.400 Bit/Sekunden über die Leitung übertragen werden. Bei den üblichen Standardeinstellungen braucht man zum Übertragen von 8 Bit (1 Byte) genau 10 Bit. Es kommt ein Start-Bit und ein Stop-Bit dazu. Bei einer Geschwindigkeit von 14.400 Baud werden also 1.440 Byte die Sekunde über die Leitung gejagt. Bei einer Baudrate von 115.200 werden 11.520 Byte die Sekunde übermittelt.(Quelle, auch mit Angaben zu den maximalen Baudraten: http://halvar.at/elektronik/kleiner_bascom_avr_kurs/uart_rs232_zum_computer/)

Auch ohne Quarz sollten niedrige Baudraten möglich sein, 300 Baud funktioniert bestimmt. Läuft der Mega8 wirklich mit 8MHz? Sollen die Integerwerte als High-/Lowbyte (16-bit) oder als ascii-Ziffern (BCD) übertragen werden?

Gruß

mic

da_reefer
10.10.2011, 15:08
Hallo,

Print Var gibt die Zahl als lesbaren String aus, beim Empfänger wertest du aber den Byte-Wert 4 aus, Input liefert dir aber den ASCII-Code.
(ASCII "4" = 52).

mfg

#fritz#
10.10.2011, 16:00
Print Var gibt die Zahl als lesbaren String aus, beim Empfänger wertest du aber den Byte-Wert 4 aus, Input liefert dir aber den ASCII-Code.
(ASCII "4" = 52).

Das war's, danke!

Bei den Zahlenformaten hängt's bei mir noch. Vielleicht habt Ihr noch einen Tip (Programmcode), wie ich am besten z.B. die Zahl 5246 sende und empfange.

da_reefer
10.10.2011, 19:31
Hallo,

siehe dir dazu am besten die Befehle Printbin und Inputbin an, damit kannst du die Werte im Binärformat übertragen und sparst dir die (langsame) String-Auswertung.

mfg