Forum: Mikrocontroller und Digitale Elektronik Mein C-Programm und die SPI Kommunikation


von Schneller toasty (Gast)


Lesenswert?

Guten Morgen zusammen,

Ich hab ein Problem mit dem verständnis wieso mein Prog. nicht 
funktioniert.
ich benutze einen ATMega 32 und möchte die SPI Schnittstelle einfach ma 
ausprobieren.
zuerst setze ich die MOSI und SCK Pins auf Ausgang das steht in der 
port.h.
Und zwar soll das Programm einfach permanent auf der SPI senden damit 
ich es mir einfach mit einem oszi messen kann.

Also zuerst setzte ich imd SPCR SPI Enable,Master und die spi clock 
rate.

Dann schiebe ich das Datum was ich gesendet haben möchte ich das SPI 
Data Register. und so wie ich das verstanden hab soll er dann 
automatisch mit dem Senden beginnen.

und in der While schleife wird dann das SPI interrupt Flag auf 1 
Überprüft denn wenn die Datenübertragung fertig ist springt er auf 1.

Aber warum funktioniert es nicht ? Ich seh noch nicht ma den Clock.
Einfach Led steuerungen funktionieren also ich kann sagen das der µC 
ohne probleme Programmiert wird.

int main (void)
{

  #include "Port.h"  //Port Zuweisungen
  while(1)
  {

  SPCR  =  (1<<SPE) | (1<<MSTR) | (1<<SPR0);


  SPDR  =  0b10101010;

  while(!(SPSR & (1<<SPIF)));


}}

von Schneller toasty (Gast)


Lesenswert?

Achja Ich weiss nicht ob das wichtig ist aber ich habe die ganzen SPI 
leitungen nirgendwo angeschloßen ich will da einfach nur mitm oszi dran

von Schneller toasty (Gast)


Lesenswert?

ahhh ich hab mein Problem gefunden und Zwar war der /SS auf eingang 
gesetzt aber hatte keinen Pullup also war er warscheinlich low und wenn 
der /SS auf LOW ist dann schaltet sich die Master SPI ab und er sendet 
nciht .... -.-.


So Jetzt sehe ich schonmal den Clock auf der Leitung und auf der Mosi 
Leitung ist das Signal aber nur mit einer Stärke von 50mV . mhm mal 
gucken woran das liegt hat da einer ne Ahnung ?

von ich bin ein (Gast)


Lesenswert?

Tastkopf auf 100:1?

von Schneller toasty (Gast)


Lesenswert?

Nein auf der ClockLeitung sehe ich auch die 0V und +5V immer hin und her 
springen - das Clock signal halt.

und am MOSI sehe Ich auf einem 50 Hertz Signal mein "eigenes" Signal von 
der MOSI leitung mit nur ca 100mV Stärke ?!


woran liegt denn das ?

von Matthias L. (Gast)


Lesenswert?

>und am MOSI sehe Ich auf einem 50 Hertz Signal mein "eigenes" Signal von
>der MOSI leitung mit nur ca 100mV Stärke ?!

Da hältst du wahrscheinlich nicht richtig dran.

Das klingt nach kapazitiver Einstreuung...

von Jonas A. (Firma: GreenWire-Elektronik) (padrejohn)


Lesenswert?

Pullup?

von Stefan E. (sternst)


Lesenswert?

Neben deinem eigentlichen Problem mal was anderes:
Es ist schon extrem unorthodox, eine Header-Datei innerhalb einer 
Funktion zu includen. Je nach Inhalt kann das auch in die Hose gehen. 
Mache es lieber dort, wo es alle machen, nämlich gleich am Anfang der 
C-Datei.

von Schneller toasty (Gast)


Lesenswert?

Mit nem PullUp hab ich es auch schon versucht einfach 100k gegen 5 Volt 
aber dann ist das signal halt nur um 5 Volt geshiftet. Also keine 
Besserung. Und ich drück schon fest genuch drauf ^^ wenn ich fester 
drück dann gehts durch den sockel :P.

Dat versteh ich net ... Muss man vieleicht noch in irgend einem Register 
ein bit setzen oder so ?

Wenn ich doch das Clock signal sehe dann bin ich doch auf jedenfall im 
Master modus vom µC oder ?

von Jonas A. (Firma: GreenWire-Elektronik) (padrejohn)


Lesenswert?

Mal den Sockel durchgemessen? Hab in letzter Zeit mehrfach festgestellt 
das der Sockel für den Pin hin war und der Pin also nicht auf der 
anderen Seite am Sockel anlag (elektrisch gesehen).

von Schneller toasty (Gast)


Lesenswert?

Grad mal eine neue Platine aufgebaut mit einem neuen Sockel aufgebaut 
haargenau das gleich problem ;/

von Jonas A. (Firma: GreenWire-Elektronik) (padrejohn)


Lesenswert?

Und der PIN geht sauber? Ich weiß nicht wie das bei dem Chip ist beim 
At898253 zum Beispiel liegen an allen Pins High-Signal an wenn der Reset 
gedrückt ist. Also vl mal manuell ohne SPI den Pin auf High ziehen? Und 
er ist als Out definiert?

von ebenfalls (Gast)


Lesenswert?

Masse des Oszi auch an Schaltungsmasse?

von Schneller toasty (Gast)


Lesenswert?

Die Masse vom oszi ist auch an der schaltung dran denn ich seh auch das 
Clcok signal perfekt so wie es sein soll. Auch der Preskaler den ich 
fuer den CLK eingestellt hab funktioniert.

Ich hab auch schon einen Ganz frisch gekauften MEga 32 reingesteckt aber 
genau das gleiche problem. oder stimmt was mit der software nicht ? 
koennte da der fehler liegen ?

von Stefan E. (sternst)


Lesenswert?

> zuerst setze ich die MOSI und SCK Pins auf Ausgang das steht in der
> port.h.

Heißt das, dass du dort den Code drin hast für die Konfiguration der 
beiden Pins? Dann bitte mal posten. Sieht für mich nämlich so aus, als 
ob MOSI nicht auf Ausgang geschaltet ist.

von Schneller toasty (Gast)


Lesenswert?

Das steht im port.h
1
DDRB    =   0xd0;             
2
//PORTB   =   0xff;           
3
4
DDRD  =  0xf0;  //PD0:PD3 Input PD4:PD7 Output. 
5
PORTD  =  0xf0;  //int. Pullup für PD4:PD7 on.

von Schneller toasty (Gast)


Lesenswert?

Moment ich seh grad das da ein fehler vorliegt und zwar entspricht 0xd0 
ja 1101 was soiviel heist wir OUT OUT IN OUT und das sollte falsch sein.


ich teste ma grad was

von Stefan E. (sternst)


Lesenswert?

Schneller toasty wrote:
> Moment ich seh grad das da ein fehler vorliegt und zwar entspricht 0xd0
> ja 1101 was soiviel heist wir OUT OUT IN OUT und das sollte falsch sein.

Richtig, du hast MISO als Ausgang und MOSI als Eingang. ;-)

von Schneller toasty (Gast)


Lesenswert?

Jo crap grad geändert und nu gehts AAHHHHHHHH ^^.

Ich hab auch vorher immer PICs Programmiert und die haben es so wenn man 
eine 0 im DDR hat dann ist das ein Output und eine 1 ist ein Input - bei 
atmel isset genau anderes rum und beim drüberschauen hab ich das 
natürlich vergessen

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.