PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART Interrupt bei einem Atmega2560



curzon161
18.01.2012, 19:44
Hallo zusammen,

Ich möchte einen Uart Interrupt für meinen rnmega2560 programmieren.
Ich habe bisher mit einem Atmega8 auf einem myAVR Mk2 programmiert,
da funktioniert folgender Code ohne Probleme:



$regfile = "m8def.dat"
$crystal = 3686400
$baud = 19200

On Urxc Datenabruf
Enable Urxc
Enable Interrupts

Config Pind.5 = Output
Led Alias Portd.5

Dim B As String * 20

Wait 1
Print "Start"

Do
Print "test"
Toggle Led
Waitms 500
Loop


End

Datenabruf:

Input B
Waitms 200
Print B

Return


Nach einiger Recherche müsste der Code eigentlich so an den Atmega2560 angepasst werden:



$regfile = "m2560def.dat"

$crystal = 16000000
$baud = 19200

On Urxc2 Datenabruf
Enable Urxc2
Enable Interrupts

Config Pind.5 = Output
Led Alias Portd.5

Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com2:" For Binary As #2

Dim B As String * 20

Wait 1
Print #2 , "Start"

Do
Print #2 , "test"
Toggle Led
Waitms 500
Loop


End

Datenabruf:

Input #2 , B
Waitms 200
Print #2 , B

Return


Jetzt hab ich ich schon "On Urxc" mit verschiedenen Zahlen ausprobiert, brachte aber kein Ergebnis.
Wenn ich in die Hauptschleife ein "Waitkey(#2)" einfüge, empfängt der µC auch die Daten springt aber nicht
in die Interrupt Routine. Für das eigentliche Programm brauche ich aber die Interrupt Routine.

Die Verbindung an sich funktioniert also, Senden und Empfangen funktioniert. Daher schließe ich einen
Hardware Fehler eigentlich aus.

Hat einer vlt. ne Idee was ich falsch mache oder wo ich einen Fehler gemacht habe?

Danke schon mal für eure Hilfe

Gruß

Curzon161

MagicWSmoke
18.01.2012, 20:41
Hat einer vlt. ne Idee was ich falsch mache oder wo ich einen Fehler gemacht habe?
Du hast mehr als ein Schlagloch.
Erstens, der ATM2560 hat 4 UARTs, USART0..3, dementsprechend gibst Du hiermit:

Enable Urxc2
den Receive Complete Interrupt des 3ten UARTs frei, nicht des 2ten.

Bascom zählt dagegen Com1..X, Com2 spricht also das 2te UART an.

Das zweite Problem, Enable URXC1 muss nach dem Config Com2 = ... kommen, denn durch das Config wird das RXCIE1-Bit wieder überschrieben/gelöscht, welches durch Enable URXC1 gesetzt wurde.
Wenn Du beides änderst, wird's gehen.

curzon161
18.01.2012, 20:59
Danke schön, jetzt scheint es zu funktionieren.

Daran hab ich gar nicht gedacht, dass das ungleichmäßig gezählt wird.
Hätte mir aber auffallen können als ich da ja die Anschlüsse RXD1 und TXD1 Com2 sind.

Gruß

Curzon161