mikrocontroller.net

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


Autor: Schneller toasty (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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)));


}}

Autor: Schneller toasty (Gast)
Datum:

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

Autor: Schneller toasty (Gast)
Datum:

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

Autor: ich bin ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tastkopf auf 100:1?

Autor: Schneller toasty (Gast)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: Jonas Arndt (Firma: GreenWire-Elektronik) (padrejohn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pullup?

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Schneller toasty (Gast)
Datum:

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

Autor: Jonas Arndt (Firma: GreenWire-Elektronik) (padrejohn)
Datum:

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

Autor: Schneller toasty (Gast)
Datum:

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

Autor: Jonas Arndt (Firma: GreenWire-Elektronik) (padrejohn)
Datum:

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

Autor: ebenfalls (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Masse des Oszi auch an Schaltungsmasse?

Autor: Schneller toasty (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Schneller toasty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das steht im port.h
DDRB    =   0xd0;             
//PORTB   =   0xff;           

DDRD  =  0xf0;  //PD0:PD3 Input PD4:PD7 Output. 
PORTD  =  0xf0;  //int. Pullup für PD4:PD7 on.

Autor: Schneller toasty (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Schneller toasty (Gast)
Datum:

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

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.