www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik spi problem mega8


Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir einer sagen ob man den ss pin als ausgang definieren muß und 
high???

beim 128 ist es so aber im datenblatt steht das er nicht benutzt wird.


Leider funktioniert mein SPI nicht


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>


#define port_cs()    DDRB|=(1<<1); //CS

//PORT SPI
#define port_spi_sck()  DDRB|=(1<<5); //SCK
#define port_spi_mosi()  DDRB|=(1<<3);//MOSI
#define port_spi_miso()  DDRB&=~(1<<4);//MISO

#define cs_high()  PORTB|=(1<<1); //HEIGH CS
#define cs_low()  PORTB&=~(1<<1); //LOW  CS



void spi_init(void)
{
port_cs();//CS
port_spi_sck(); //SCK
port_spi_mosi();//MOSI
port_spi_miso();//MISO
cs_high();//CS auf high
SPCR=(1<<SPE)|(1<<MSTR);
}


//SPI WRITE
unsigned char Write_SPI(char data)
{SPDR=data;
while(!(SPSR & (1<<SPIF)));
return SPDR;
}

void main(void)
{
unsigned char ergebniss;
spi_init();
Write_SPI(0x8d);
ergebniss=Write_SPI(0xff);
}


leider bleibt er bei Write_SPI Hängen.

Es sieht so aus als ob er in der While Schleife hängt vom Write_SPI():

Pins sind korreckt verbunden und nachgemessen.

Port definitionen stimmen

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann mir einer sagen ob man den ss pin als ausgang definieren muß und
> high???
Ja, der /SS-Pin muss im Master-Betrieb als Ausgang konfiguriert werden 
(bzw. wenn er als Eingang konfiguriert ist, muss er permanent High-Pegel 
haben).

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja jetz bleibt er nicht mehr in der while hängen


aber das nächste problem.


MISO zeigt immer high pegel.

MOSI nur wenn er überträgt.

cs auch nur wenn er überträgt low

sck sehe ich am oszi nicht

deshalb bekomme ich immer 255 (0xff);


was ist das wieder

Autor: Timur Yigit (smokingslim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich weiß ja nicht was du mit deiner SPI Schnittstelle ansprechen 
willst.
Aber eigentlich wollen die meisten SPI Partner das mann nach jeder 
abgeschlossener Übertragung das CS wieder aus macht.
Also du solltest das mal in deine Write routine einbinden d.h vor dem 
write aktivieren und danach wieer deaktievieren.

Autor: Timur Yigit (smokingslim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ha jetzt seh ich erst das du deine CS einemal auf High gestetzt hast und 
dann  nicht auf Low dann geht es natürlich nicht.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das habe ich ansprechen will ich eine RTC Ds1390 von MAXIM

bevor ich den ertsen Write mache setze ich cs auf low

nach dem ich alle bits übertagen habe setzte ich ihn wieder auf high


lesen tu ich mit Write_SPI(0xff);

geht problemlos mit dem 128iger aber mit dem Mega 8 nicht.

kann es sein das die ISP Leitungen stören???

Die sind ja mit SCK MISO MOSI verbunden.

beim 128iger nutze ich TX RX und SCK

und natürlich bei beiden den Reset.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Also ich habe aber auch immer Pech erst der MEga 8 jetzt der RTC im 
eimer

Habe diesn getauscht


und siehe da es geht.


Danke für eure hilfe

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.