Forum: Mikrocontroller und Digitale Elektronik Lesen mit SPI


von Ni_Hao_Na (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe ein Blockschaltbild angehängt, indem 2 Mikrocontroller 
(ATMEGA328 und ATMEGA16) und der MAX6675 miteinander verbunden sind. Der 
MAX6675 digitalisiert eine Temperatur, welche mittels eines Fühlers 
gemessen werden.

Der ATMEGA328 und der MAX6675 sind bereits in einem System integriert, 
ich will nun die 16Bit, welche der MAX6675 sendet mittels SPI lesen, 
darum habe ich noch den ATMEGA16 angehängt, welcher auch ein Display 
betreibt, welches die Temperatur ausgeben soll.

Ich konnte das Gerät allerdings nicht mit nachhause nehmen, darum dachte 
ich, dass ich einfach zwei ATMEGA16 miteinander kommunizieren lasse, 
also:

- einer davon ist der Master, der 2 Testbytes sendet
- der andere ist der Slave, der diese 2 Testbytes empfangen soll

Den Code für den Master habe ich bereits geschrieben, der funktioniert 
einwandfrei, habe ihn auf meinem Experimentierboard getestet und 
ausgemessen. (Der Code ist übrigens auch angefügt).

Mein Problem liegt beim Empfangen. Ich weiß auch gar nicht so recht, wie 
ich da arbeiten soll:

- soll ich den SCK an den INT1 hängen, um so mit externem Interrupt die 
einzelnen Bits auszulesen? Dann müsste ich das GIE-Bit setzen, wenn CS=0 
wird und das GIE-Bit wieder löschen, wenn CS=1 wird?
Oder gibt es da eine bessere Möglichkeit?

Vielen Dank im Vorraus!
mfg Ni_Hao_Na

von Nils ‫. (n-regen)


Lesenswert?

Der ATmega16 hat ein Hardware-SPI-Modul, du brauchst deine SPI-Leitungen 
also bloß an die entsprechenden Pins vom ATmega hängen (CS vom MAX6675 
an SS vom ATmega, DO an MOSI, SCK an SCK) und ihn als SPI-Slave 
konfigurieren. Dann empfängt er vollautomatisch die Daten und löst, wenn 
du das möchtest, einen Interrupt aus, sobald ein Byte komplett ist.

Nebenbei: Du kannst INT1 (wie jeden anderen Interrupt auch) einzeln ein- 
und ausschalten (das Register dafür heißt GICR); du musst nicht generell 
alle Interrupts ein-/ausschalten.

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.