Forum: Mikrocontroller und Digitale Elektronik ATMega328PA und MCP2515


von S. G. (goeck)


Angehängte Dateien:

Lesenswert?

Hallo,

ich brauche mal eure Hilfe. Ich habe eine Platine mit einem ATMega328PA 
und einem MCP2515. Zum Betreiben nutze ich die universelle CAN 
Bibliothek von Fabian Greif (hier zu finden 
http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek). Auf 
einer Platine mit einem ATMega8 und einem MCP2515 funktioniert alles 
super, wenn ich allerdings auf der erstgenannten Platine die can_init() 
Funktion aufrufe, bleibt die Kommunikation in einer Endlosschleife 
hängen. Das ganze sieht so aus, wie auf dem angehängten Bild. Oben seht 
ihr MOSI, unten MISO. Obwohl die Init Funktion nur einmal aufgerufen 
wurde findet laufend diese Kommunikation statt und nichts anderes mehr.

Der entsprechende Code sieht so aus
1
int main(void)
2
{
3
    // initialize UART 
4
    uart_init(UART_BAUD_SELECT(19200UL, F_CPU));
5
6
    // activate interrupts
7
    sei();
8
9
    // redirect standardoutput => now we can use printf()
10
    stdout = &mystdout;
11
12
    // switch on Bluetooth
13
    PORTD |= (1<<PIND4);
14
  
15
    // initialize MCP2515
16
    if (!can_init(BITRATE_250_KBPS)) {
17
        PRINT("Error: no MCP2515\n");
18
        for (;;);
19
    }
20
    else 
21
        PRINT("MCP2515 active\n\n");
22
    ...
23
    return 0;
24
}
Hat jemand eine Idee, was da los sein könnte?

Vielen Dank und viele Grüße

von JW (Gast)


Lesenswert?

mega328 / mega8 haben unterschiedliche IntVektoren.

Vermutlich wird ein Vector ohne Inthandler gerufen, was so viel wie JUMP 
0x0000 bedeutet. Also zeigt das Oszi alles richtig an ;-)

Gruß,
Jürgen

von JW (Gast)


Lesenswert?

was ich noch schreiben wollte:
Auch für den richtigen Controller übersetzt ?

von S. G. (goeck)


Lesenswert?

Hallo JW,

also ich habe den Code für einen ATMega328P übersetzt. Eine passendere 
Auswahl lässt AVRStudio/WinAVR nicht zu.
Ich bin etwas unschlüssig wegen deines Kommentars mit dem Inthandler, 
kann damit nicht soviel anfangen. Wie kann ich das überprüfen ohne 
DebugWire und ggf. ändern?

Schönen Sonntag :-)

von S. G. (goeck)


Lesenswert?

JW schrieb:
> mega328 / mega8 haben unterschiedliche IntVektoren.
>
> Vermutlich wird ein Vector ohne Inthandler gerufen, was so viel wie JUMP
> 0x0000 bedeutet. Also zeigt das Oszi alles richtig an ;-)
>
> Gruß,
> Jürgen

Hallo Jürgen,

dein Tipp war richtig. Ich hatte zwar die aktuellste UART Bibliothek von 
Peter Fleurys Website runtergeladen, wo sich auch der ATMEga328P drin 
findet, allerdings sind wohl die Interrupt Vektoren falsch.
Habe dann die aktualisierte Bibliothek von 
http://beaststwo.org/avr-uart/index.shtml verwendet, und die 
funktioniert einwandfrei. Nun bleibt der Controller nicht mehr bei der 
Abfrage hängen.

Danke für eure Hilfe.

Grüße vom Rhein

von Alter F. (alter_falter)


Lesenswert?

Wenngleich schon alt, aber für alle künftigen Leser ein wichtiger 
Hinweis bezüglich der Uart Library auf beatstwo.org:

Es hat sich zumindest ein Bug eingeschlichen in der Lib.
Bei den Defines für den 644P steht:

#define UART0_RECEIVE_INTERRUPT  USART0_RX_vect
#define UART1_RECEIVE_INTERRUPT  USART0_UDRE_vect
#define UART0_TRANSMIT_INTERRUPT  USART1_RX_vect
#define UART1_TRANSMIT_INTERRUPT  USART1_UDRE_vect

es sollte aber heißen:

#define UART0_RECEIVE_INTERRUPT      USART0_RX_vect
#define UART0_TRANSMIT_INTERRUPT     USART0_UDRE_vect
#define UART1_RECEIVE_INTERRUPT      USART1_RX_vect
#define UART1_TRANSMIT_INTERRUPT     USART1_UDRE_vect

Der Autor ist mittlereile bereits verstorben, sodaß die Homepage nicht 
mehr aktualisiert wird.


Dies zu Eurer Info.

von S. G. (goeck)


Lesenswert?

Hallo Alter Falter,

Peter Fleury oder Tim Sharpe (beaststwo.org) ist verstorben?

Ist es nicht eh viel ratsamer mittlerweile sich an den Arduino 
Bibliotheken irgendwie zu bediehnen, was UART angeht? Bin da nicht so 
informiert...

Grüße

von Alter F. (alter_falter)


Lesenswert?

Hallo S.G.,

habe von Elisa Sharpe erfahren, daß Tim wohl 2009 verstorben sei.


Alter_Falter

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
Noch kein Account? Hier anmelden.