www.mikrocontroller.net

Forum: Compiler & IDEs SPI-Problem mega88


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

Bewertung
0 lesenswert
nicht 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

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss man bei SPI nicht erst noch einen Takt programmieren?

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt mal den Pin toggeln lassen.
for(;;)
{
 PORTB |= (1<<PB5); 
 PORTB &= ~(1<<PB5);
}

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

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.