mikrocontroller.net

Forum: Compiler & IDEs SPI-Problem mit MCP2515 und ATmega16


Autor: ElMachel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade einen MCP2515 zum laufen zu bringen.
Dazu hab ich mir den CAN-SPI Adapter von www.avrcard.com
besorgt, den ich an einen ATmega16 angeschlossen habe (10 cm
Leitung).

Zum testen der Kommunikation vom MCP2515 und dem
ATmega16, wollte ich einfach ein Paar Register setzen,
und dann den gesetzten Wert einfach wieder auslesen,
allerdings bekomm ich nur 0xFF zurück.

Ich habe den relevanten Codeteil im Anhang mitgeschickt.
Könnte ihn bitte jemand durchschauen und auf Fehler
überprüfen?
Oder vielleicht andere Tipps zur Fehlereingrenzung geben.
Wär echt super!

Vielen Dank im Voraus.

Christian

hier noch die spi-Funktionen:

void spi_init(void)
{
  /* Datadirection setzen */
  DDRB = (1 << MOSI) | (1 << SCK) | (1 << CS);
  /* SPI Control-Register konfiguirieren */
  SPCR = ( 1 << SPE ) | (1 << MSTR) | ( 1 << SPR1) | ( 1 << SPR0);
}


void spi_write(byte_t data)
{

  SPDR = data;

  loop_until_bit_is_set(SPSR,SPIF);

}

void spi_cs(byte_t value)
{

  if ( value != 0) {
    PORTB |= 0x10;
  } else {
    PORTB &= ~(0x10);
  }

}


byte_t spi_read(void)
{
  return SPDR;
}

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bin mir nicht 100 % sicher , aber muss der AVR nicht erst als
SPI_slave im SPCR geschaltet werden?

Mfg
Dirk

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

glaub ich ehrlich gesagt nicht, jedenfalls steht nichts davon im
Datenblatt.

mfg
Christian

Autor: Mike Schaub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wurde das Datenrichtungsregister richtig gesetzt?
Anbei meine Routine für den MCP2510 mit ATMega128:

void init_SPI (void)
{
  outp(0x70,HW_SPI);  //  PortB ist HW_SPI
  outp(0x07,DDR_SPI);  //Datenrichtungsregister setzen
  outp(0x5F,SPCR);  //  SPI Controll Register setzen
}

Gruß
Mike

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mmh, da müsste ich mich jetzt schon schwer täuschen, aber mit der
Zeile:
DDRB = (1 << MOSI) | (1 << SCK) | (1 << CS);
sollte ich die notwendigen Pins auf Output geschaltet haben.
Auch das Control-Register dürfte IMHO richtig sein,
(1 << SPE ) /* SPI-Enable setzen */
( 1 << MSTR) /* Master Mode */
( 1 << SPR1) | ( 1 << SPR0); /* SCK mit fosc/128 */

In einer neueren Fassung des kleinen  Testprogramms warte ich jetzt
noch ein paar
Sekunden bis ich den ersten SPI-Operation sende, da ich gelesen habe,
dass der MCP2515 einige Taktzyklen braucht bis er überhaupt richtig
läuft, dass hat aber auch kein anderes Ergebnis zur Folge gehabt.

Was sagst du zu den anderen SPI-Funktionen? Hab ich da vielleicht noch
einen
Denkfehler drin? Muss ich vielleicht bei spi_read() noch das SPIF Flag
bearbeiten?


mfg
Christian

Autor: Mike Schaub (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hänge Dir einfach mal mein Programm für den ATMega128 und den
MCP2510 an. Jedenfalls hatte ich anfangs das gleiche Problem, es kam
immer nur 255 zurück.

Gruß
Mike

Autor: Mike Schaub (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und das Hauptprogramm

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

super jetzt gehts!!  Dein Quellcode hat mich auf meinen Fehler
gebracht. Habe immer CS auf High anstatt auf Low gesetzt (schäm).

Vielen Dank nochmal
Christian

Autor: tüdel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat schon mal jemand den mcp2515/2510 unter einem msp430 angesteuert?
würde mich brennend für den code interessieren :-)

mfg tüdel

Autor: wehrs (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja, bin gerade am testen und ausprobieren. (Mit MSP430F149 über SPI
Schnittstelle zum MCP2515). Komischerweise sende ich immer 4x das selbe
Signal. Hatte da auch schon mal jemand Probleme damit?

Grüessli wehrs

Autor: tüddel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was macht dein prog?
lauft es jetzt?
schreibe jetzt seit einer wo routinen für dem mcp...
konnte diese jedoch noch nicht testen :-(
denke mal, bei meinem glück läuft wieder nix :-(

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ihr.

ich habe auch ein problem mit dem mcp2510.
er antwortet nicht!
auf der out-leitung des mcp`s liegt nur ein phantomsignal der clock.
diese habe ich auf 50kHz gedrosselt, da ich den mcp mit 2MHz oszi
bestückt habe. cs liegt gegen masse, int ist high, reset liegt mit
einem widerstand (10k) gegen vcc.

auch nach einer initialisierung bekomme ich keine signale aus dem
chip.
auch nach einem tausch des chips gab es keinen erfolg

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi KoF,

ich habe hier:
http://www.mikrocontroller.net/forum/read-1-66019....

schonmal Routinen für den MCP2515 mit mega16 gepostet. Funktioniert
soweit ganz gut, musst Dir die relevanten Stellen halt etwas
raussuchen.

Viele Grüße, Stefan

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab den fehler grob schonmal lokalisiert.

cs muß den pegel wechseln. wenn er so, wie bei mir immer gegen masse
läuft geht es nicht. jetzt steuere ich es über einen extra pin meines
uc`s und siehe da, er antwortet :-)

aber deine quellen werde ich mir auch nochmal ansehen

mfg
KoF

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.