Also irgendwie is das zu hoch für mich.... wenn ich das Programmierkaben berühre dann macht er weiter....??????
BITTE HELFT MIR! Auch die kleinste Ahnung könnte mir helfen!
// Prüft, ob es die Startseite mit Content-ID 1 ist if (isset($_GET['content']) && intval($_GET['content']) === 1) { echo ''; }
Werbung
Hallo.
Ich habe einen ATMEGA128 mit dem CAN-Controller MCP2515 verbunden.
Nun, peinlicherweise habe ich solche Probleme das SPI zum Laufen zu bringen!
Das Programm hängt immer am zweiten SPI-transmit Versuch, weil es darauf wartet bis SPIF im SPSR-Register logisch 1 ist. Die Übertragung wird also nicht fertig...?
Das Problem hatte ich beim Mega32 mit MCP2515 nochnie!
Hier der Code:
UART_transmit_string("\rTransmit");Code:// -=> SPI initialisieren <=- void SPI_init(void){ // Setze CS, SCK und MOSI als Ausgang; MISO als Eingang; Pullup auf CS SPI_DDR |= (1<<SPI_CS)|(1<<SPI_SCK)|(1<<SPI_MOSI); // Ausgang SPI_DDR &= ~(1<<SPI_MISO); // Eingang //SPI_PORT |= (1<<SPI_MISO); // Pullup ein //SPI_PORT &= ~(1<<SPI_CS)|(1<<SPI_SCK)|(1<<SPI_MOSI); // Pullup aus // Aktiviere SPI; Master Interface; Rate = F_CPU / 4 SPCR = (1<<SPE)|(1<<MSTR); } // -=> SPI Transmit <=- uint8_t SPI_transmit( uint8_t data ){ UART_transmit_string("\rTransmit"); SPDR = data; // Starte Transmission while( !( SPSR & (1<<SPIF) ) ); // Warte bis Transmission beendet ist UART_transmit_string("\rTransmit finished"); return SPDR; // Return Daten-Register } // -=> CS auf Low <=- void SPI_cs_low(void){ SPI_PORT &= ~(1<<SPI_CS); } // -=> CS auf High <=- void SPI_cs_high(void){ SPI_PORT |= (1<<SPI_CS); }
UART_transmit_string("\rTransmit finished");
Durch sie kann ich ermitteln wo es hängt.
Eserscheint im Terminal:
"Transmit
Transmit finished
Transmit"
Das bedeutet er hängt beim zweiten Transmittversuch:
while( !( SPSR & (1<<SPIF) ) ); // Warte bis Transmission beendet ist
An was kanndas liegendass die Transmission nicht beendet wird?
bzw. SPIF-Flag in SPSR nicht gesetzt wird?!?!?
Gruß,
Franz
Also irgendwie is das zu hoch für mich.... wenn ich das Programmierkaben berühre dann macht er weiter....??????
BITTE HELFT MIR! Auch die kleinste Ahnung könnte mir helfen!
Gruß,
Franz
Sollte die SCK-Leitung mit 10K ge-Pullupt bzw. downt werden?
Gruß,
Franz
aha, also wenn ich die SCK-Leitung anfasse, dann geht es, aber extrem langsam!
Ich vermute dass ich durch das 50Herz dignal aus dem Boden die Taktfrequenz erzeuge für SCK. 50/8bit (für jedes schift ca.). er schreibt mir ca. 5 hin pro secunde. das ginge hin.... ABER WARUM?!?!!?
Die SCK-Leitung ist doch verbunden! ich kann den Controller ja auch Programmieren damit! sonst würde das ja auch nicht funktionieren!
Gruß,
Franz
AHA....
Also #define SPI_SCK 1 mag der Compiler anscheinend nicht... mit PB1 direkt eingesetzt wird der PIN SCK auch ein ausgang und dann gehds...
Äusserst seltsam.
Bitte entschuldigt die Posts!
Eure Meinungen dazu währen jetzt gefragt.
Gruß,
Franz
Lesezeichen