mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MAX 7219 mit SPI ansteuern?


Autor: Christina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte einen MAX 7219 7-segment-Treiber mit einem ATMega 8 über SPI 
steuern. Dabei soll, wenn ich es im Datenblatt vom 7219 richtig 
verstanden habe, nach dem transfer von 16 bit die Flanke von LOAD (PB2 
am uC) steigen.

Kann mir jemand sagen, ob ich die SPI-Methoden so richtig aufgebaut 
habe? (Mit SPI habe ich so gut wie garkeine Erfahrung...)


void SPI_MasterInit(void)
{
  // set MOSI and SCK output, all others input
        DDRB = (1<<PB2)|(1<<PB3)|(1<<PB5);
        // enable SPI, Master, set clock rate fck/16
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

  PORTB = 0x00;
}

void SPI_MasterTransmit(char cData)
{
  SPDR = cData;   // Start transmission
  while(!(SPSR & (1<<SPIF)));   // Wait for transmission complete

  PORTB |= (1 << PB2);
  PORTB &= ~(1 << PB2);
}


void transmit(char addr, char data) {
  SPI_MasterTransmit(addr);
  SPI_MasterTransmit(data);
}

Vielen Dank fürs lesen und helfen :)

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, so geht es nicht: Du machst bereits zwischen den beiden 
8-Bit-Transfers einen Puls an PB2.

Probier es mal so:
void transmit(char addr, char data) {
  SPDR = addr;                  // Start transmission
  while(!(SPSR & (1<<SPIF)));   // Wait for transmission complete

  SPDR = data;                  // Start transmission
  while(!(SPSR & (1<<SPIF)));   // Wait for transmission complete

  PORTB |= (1 << PB2);
  PORTB &= ~(1 << PB2);
}

Viele Grüße, Stefan

Autor: Christina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke! ich werde das morgen mal ausprobieren.

p.s.: wie kann ich eigentlich den code so wie du anzeigen lassen?

Autor: Christina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es lebt! :D

danke für die hilfe!

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorsicht, der 7219 ist nicht 100% SPI kompatibel.
Das ist erst der 7221. MAXIM sagt beim 7219 "serial 3 Wire ".
Also auf die Flanken und das MSB achten.

Gruß Stephan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan Henning wrote:
> Vorsicht, der 7219 ist nicht 100% SPI kompatibel.


Das ist Quatsch mit Soße.
Den 7219 interessiert nur die steigenden Flanke des LOAD zur Übernahme.
Beim 7221 muß der Pin aber schon während des Schiebens low sein.

D.h. die Ansteuerung für nen 7221 geht auch immer für nen 7219, aber 
nicht umgekehrt.


Peter

Autor: Christina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so jetzt jäuft alles wie es soll. es müsste jetzt sogar auch mit dem 
7221 kompatibel sein:
void SPI_MasterInit(void){
  DDRB = (1<<PB2)|(1<<PB3)|(1<<PB5);   // set PB2, MOSI and SCK output, all others input
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);   // enable SPI, Master, set clock rate fck/16
  
  PORTB |= (1 << PB5)|(1 << PB2);
}

void transmit(char addr, char data) {
  PORTB &= ~(1 << PB2);

  SPDR = addr;           // Start transmission
  while(!(SPSR & (1<<SPIF)));       // Wait for transmission complete
  
  SPDR = data;           // Start transmission
  while(!(SPSR & (1<<SPIF)));       // Wait for transmission complete

  PORTB |= (1 << PB2);
}

danke nochmal für die hilfe

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,
genau deswegen betont Maxim den Unterschied auf Seite 6 im Datenblatt, 
und
erwähnt " and its serial Interface is fully SPI comtatible" ist..

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.