mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI und ATmega128


Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin gerade nach dem Datenblatt des Atmega128 vorgegangen und wollte
die SPI initialisieren. Aber es funktioniert nichts so. Hat wer von euch
schon mal eine Erfahrung gemacht?

Ach ja, was ist der Unterschied zwischen (1<<PD6)  und _BV(PD6)
was ist besser und kann alle beiden Versionen der AVR-Compiler?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da solltest du uns mal deinen Quellcode zeigen, dann kann dir auch
jemand sagen, was du falsch machst.

(1<<PD6) und _BV(PD6) sind identisch. Irgendwo wirst du ein
#define _BV(x) (1<<(x))
finden. Ob das dein spezieller AVR-Compiler kann -> Keine Ahnung,
avr-gcc und Konsorten kennen es jedenfalls.

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte z.B. dass an der SPI die Zahlenreihe 0x10, 0x78, 0x00, 0x10,
0xF8, 0x00 herausgeschickt wird. Ich habe es mal in der Main-Schleife so
versucht zu programmieren:

  /* Set MOSI(PB2), SCK(PB1) and SS(PB0) to output,
   * all others are input */
  DDRB = (1<<DDB2) | (1<<DDB1) | (1<<DDB0);

  /* Activate pull-up resistors for all outputs not for inputs

        ??Muß ich die aktivieren?*/
  //PORTB &= ~(_BV(PB3));
  //PORTB =  _BV(PB2) | _BV(PB1) | _BV(PB0);

  /* no SPI interrupt, SPI as master, MSB first, fck/16 */
  SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);


  SPDR = 1;
  while (!(SPSR & (1<<SPIF)))
  ;
  printf("Daten %02x - %u  ", SPDR, SPDR);

  SPDR = 0;
  while (!(SPSR & (1<<SPIF)))
  ;
  printf("Daten %02x - %u  ", SPDR, SPDR);

  SPDR = 7;
  while (!(SPSR & (1<<SPIF)))
  ;
  printf("Daten %02x - %u  ", SPDR, SPDR);

  SPDR = 8;
  while (!(SPSR & (1<<SPIF)))
  ;
  printf("Daten %02x - %u  ", SPDR, SPDR);

  SPDR = 0;
  while (!(SPSR & (1<<SPIF)))
  ;
  printf("Daten %02x - %u  ", SPDR, SPDR);

  SPDR = 0;
  while (!(SPSR & (1<<SPIF)))
  ;
  printf("Daten %02x - %u  ", SPDR, SPDR);


Als Ausgabe erhalte ich über die UART:
UART TEST
 Daten 00 - 0  Daten 00 - 0  Daten 00 - 0  Daten 00 - 0  Daten 00 - 0
Daten 00- 0


Was hat das zu bedeuten?? Ich versteh auch nicht, steht in SPDR nun das
drin was ich versende oder dass, was ich vom anderen Baustein gesendet
bekomme?

Autor: Jan M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie du es beschreibst, stimmt das Verhalten des Programms.
SPDR dient sowohl für die gesendeten als auch für die empfangenen
Daten. Schreibst du etwas in dieses Register, wird es gesendet. Nach
dem Senden enthält SPDR dann die Daten, die empfangen wurden. Da nichts
empfangen wird, ist die Ausgabe verständlicherweise 0.
(Wann genau der hineingeschriebene Wert aus dem SPDR gelöscht wird,
kann ich dir aus dem Kopf nicht sagen, das findest du aber auch im
Datenblatt)

> /* Activate pull-up resistors for all outputs not for inputs

>    ??Muß ich die aktivieren?*/

Ich weiß nicht, wo du diese Zeile her hast, so wie es da steht, stimmt
es nicht. pull-ups gibt es nur bei inputs. Diese ziehen den Eingang auf
ein definiertes high-level, auch wenn kein Signal anliegt. Bei outputs
braucht man keine pullups (bzw. nennt es nicht so), da man einen
Ausgang ja aus dem Programm heraus mit high- oder low-level belegt.

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.