mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Spi 11 bit


Autor: b00N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen. zuerst muß ich mal sagen das ich noch nie einen MyC 
programmiert habe. ergo habe ich keinen ahnung.
 ich muß mit meinem Atmega 64 einen neigungssensor auslesen, dessen 
datenwort 11bit lang ist. ich will das ganze in c programmieren.
ich habe mir das so überlegt:

1) SPDR mit befehl für auslesen laden und senden. (keine daten vom 
sensor erwartet)
2) laden des SPDR mit einem dummybyte und senden.empfangen des msb vom 
11 bit datenwort (ir darf nicht auslösen)
3) Clk pausieren oder verlangsamen.
4) speichern des SPDR im speicher
5) laden des dummybytes in SPDR
6) senden vom dummybyte und empfangen der letzten 3 daten vom Sensor.
   nach 3 takten die übertragung beenden.

ist das so wie ich mir das vorgestellt habe möglich oder muß ich das 
anders machen


danke für eure hilfe

Autor: Fasti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Schon fast richtig:
Du musst bevor du Daten ins SPDR schreibst den Chip Select Pin deines 
Neigungssenors auf low ziehen. Auf welchen Pin du diesen am AVR legst 
ist dir überlassen.
Damit sparst du dir dann den 3.) Punkt die Clk anhalten, da dass der AVR 
automatisch macht, sobald das SPDR Register vollständig geshiftet ist, 
sprich 8 Bits gesendet (und empfangen) wurden.
Nach Punkt 6 einfach den CS Pin wieder auf high und fertig ist das 
ganze.

Ciao

Fasti

Autor: b00N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für deine antwort. werde mal ein wenig coden und den code dann mal 
reinstellen.

Autor: b00N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe mir das jetzt so gedacht:

int read_x_channel(void)
{
char x1;
int x3, xGes;
char x2;

 PORTB = (0 << PB0);                   //SS auf low setzen
 SPDR = 0x10;                          //Befehl read X-Channel in SPDR
 while(!(SPSR & (1<<SPIF)));        //Warten bis Empfangsende
 x1 = SPDR;                  //Wert x1 aus DR wird gespeichert
 x3 = x1<<3;               //x1 wird um 3 verschoben
 SPDR = 0x0c;               //Dummybyte
 while(!(SPSR & (1<<SPIF)));           //s.o.
 x2 = SPDR;                   //Wert x2 aus DR wird gespeichert
 x2 = x2 >> 5;               //x2 wird korregiert/ Verschieben um 5 
Stellen
                          //aus xyz00000 wird 00000xyz
 xGes = x3 + x2;             //Endwert wird berechnet
 PORTB = (1 << PB0);                   //SS auf high setzen

 return (xGes);               //Endwert wird zurück gegeben

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und um welchen Sensor handelt es sich?

Autor: b00N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was hier noch fehlt is der y-port. es handelt sich um einen 
neigungssensor von vti.arbeitet wie ein airbagsensor. ca

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat das Funktioniert ?

Ich habe hier einen SCA100 und es sieht mit diesem Programm nach einer 
Datenkollision am MISO-Kanal aus.

Beschaltung dürfte stimmen, MISO auf MOSI und umgekehrt

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.