Forum: Compiler & IDEs SPI-Problem mega88


von Slowflyer (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich experemntiere ein wenig mit der SPI eines mega88 herum. Nun habe
ich ein einfaches Testprogramm geschrieben, dass einfach 1010...
ausgeben soll, siehe Projekt im Anhang.

Es passiert aber an dem SCK-Pin nichts. Wenn ich es richtig verstehe,
so müsste da aber ein Clock anliegen, das Oszi zeigt aber nichts an
(beim Programmieren des mega88 per ISP, sieht man den Clock, nur um
Fragen, ob richtig gemessen, zuvorzukommen).

Meiner Meinung nach habe ich alles gemacht, was im Codebeispiel des
Datenblattes stand, wie man liest ohne Erfolg. Was habe ich übersehen
oder falsch gemacht?

Gruß, "der Langsame"

P.S. ich verwende (WinAVR) mit avr-libc 1.2.5 und avr-gcc 3.4.4 und
avr-Studio 4.12 build 460

von Slowflyer (Gast)


Lesenswert?

Nachtrag:

Im Simulator wird eigenartigerweise das SPIF zu keiner Zeit gesetzt,
d.h. er verbleibt für immer in der while-Schleife. Warum??? Langsam
gehen mir die Ideen aus.

von A.K. (Gast)


Lesenswert?

Muss man bei SPI nicht erst noch einen Takt programmieren?

von Slowflyer (Gast)


Lesenswert?

Hmm...

jetzt hab ich mal einen Mega16 mit dem gleichen Programm (nur MISO und
SCK angepasst) programmiert und da läuft die SPI. Sehr eigenartig.

>Muss man bei SPI nicht erst noch einen Takt programmieren?

Mann kann einen Teiler beschreiben (Flags im SPCR und SPSR Register),
ich denke das muss nicht notwendigerweise sein (wenn default 0
eingesetzt wird hab ich fosc/4). Ich möchte doch nur (erstmal), dass
der Takt funktioniert.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Noch eigenartiger: wenn ich das auf einem ATmega128 laufen lasse
(DDRx-Pins passend geändert), dann läuft es nach einem power-on reset
erstmal eine Weile, bis dann offenbar SPIF nicht mehr gesetzt wird.
Nach einem externen oder JTAG Reset läuft es nicht los. %^)

Andererseits habe ich ähnlichen Code (nur natürlich ohne
Endlosschleife :) im Produktiveinsatz, ohne Probleme.

von Slowflyer (Gast)


Lesenswert?

Ich habe jetzt mal den Pin toggeln lassen.
1
for(;;)
2
{
3
 PORTB |= (1<<PB5); 
4
 PORTB &= ~(1<<PB5);
5
}

und das geht auch nicht. Wahrscheinlich hat sich der Ausgang
verabschiedet. Werd es mal mit einem anderen versuchen. Für heute ist
erstmal Schluss.

Vielen Dank und Gruß,

Slowflyer

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.