ATMega328PA und MCP2515

#1816685
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
Angehängte Dateien:
#1819746
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
#2615367
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren