mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Master


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Langsam versteh ich die Welt nicht mehr!
Ich habe 2 ATMega16 per SPI verbunden. (software von mc-project.de, an
den ATMega16 angepasst)
Der Master sendet jede 4 sec ein Code an den Slave der dann eine LED
an/ausschält.
Beim ersten durchlauf wird eine '0' gesendet, wodurch die LED an
geht. Klappt auch Prima!
Nur beim 2. durch lauf wo er eine '1' sendet (zumindest soll) geht
nix mehr.Egal, was ich beim 2. Suchlauf sende geht nicht.
Ich hab mal ein Oszi dran gemacht und mal am SCK / SS(Slave) geschaut,
was rauskommt:

1.Durchgang:
SCK -> Sieht man ganz deutlich den Takt.
SS -> Geht kurtz auf LOW und dann wieder auf High

2.Durchgang:
SCK -> Geht einfach auf High (und macht nix sonst)
SS  -> geht einfach auf LOW (und macht nix mehr)
so bin ich darauf gekommen, dass er er in der schleife zum testen ob
alles gesendet wurde hängen bleibt. Hab die Stelle im code markiert.

Hoffentlich kann mir jemand helfen !!!!
Bin für jede hilfe dankbar !!!!
MfG Sf2

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

dein Problem war ganz schon verzwickt, hab ich habs jetzt
rausgefunden.
Das Problem ist das du PB0 als SS hernimmst. Dadurch machst du
indirekt PB4 (SS) als Input. Da du aber im Mastermode bist
passiert nun folgendes. Der Controller erkennt aktivität am SPI und
löscht alle Register und wird zum Slave, hat was mit Mulitmaster zu
tun. Lies dir mal im Datenblatt den Absatz "SS Pin Functionality" ->
"Master Mode" durch.
Wenn du jetzt einfach zu deiner master_init() noch
DDRB |= (1 << PB0);
dazuschreibst müsste es klappen.

Wünsch noch einen schönen  Sonntag
Christian

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach sorry,

zu deinem Code musst du noch
DDRB |= ( 1 << PB4); /*SS als Output definieren, dann passiert nichts
*/
hinzufügen

Autor: Sf2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auu mann ich bin soooooo dumm !
Eigentlich hätt ich wissen müssen das ich SS als eingang definieren
muss. Ich bin immer fest davon ausgegangen, der wäre ein Ausgang.

@ElMachel:
Vielen Vielen Dank !!!!! Und ein Schönes Jahr !

MfG Sf2

Autor: Sf2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht es eigentlich was wenn ich den ISP am SPI angesteckt lasse??

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

es kommt darauf an welchen ISP du hast. Falls du einem mit 74hc2xx hast
dann sind die Ausgaenge Tristate und stoeren nicht.

Mfg
Dirk

Autor: Sf2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab mir einen mit 74hc244 gebastelt.
macht es auch dem 2. avr der angeschlossen ist auch nix aus ? dann
müsst ich nur noch die reset stecker wechseln um dein anderen zu
programmieren.

MfG

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.