www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DOG-M Lcd im SPI-Mode


Autor: Andreas Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe hier ein dog-m162 und will ebendieses im SPI-Mode betreiben.
Das Ding tut natürlich gar nichts. Nachdem ich jetzt sowohl die 
Initialisierung aus dem Datenblatt des Displays sowie die aus dem 
Datenblatt des Controllers versucht habe zweifle ich jetzt so langsam 
daran, dass mein SPI-Code überhaupt stimmt. Leider habe ich kein 
Logikanalyzer, um das ganze zu überprüfen.
Ansich sollte der Code Daten zur fallenden Taktflanke ausgeben, damit 
sie is zu steigenden Flanke stabil sind, wo das Display sie dann 
übernimmt.
Vielleicht erkennt ja jemand noch irgendwelche systematischen Fehler, 
Denkfehler oder was auch immer.

#define RST_L PORTD&=~(1<<2)
#define RST_H PORTD|=(1<<2)
#define CSB_L PORTD&=~(1<<1)
#define CSB_H PORTD|=(1<<1)
#define RS_L PORTD&=~(1<<0)
#define RS_H PORTD|=(1<<0)
#define CLK_L PORTD&=~(1<<3)
#define CLK_H PORTD|=(1<<3)
#define SDO_L PORTD&=~(1<<4)
#define SDO_H PORTD|=(1<<4)

#define BEEP_T PORTD^=(1<<5)
#define BEEP_L PORTD&=~(1<<5)
//SPI Status-Codes
#define SPI_READY 1
#define SPI_START 2

volatile uint8_t fsm_spi_status=0;
volatile uint8_t spi_dr=0; //SPI Data Register
volatile uint8_t beep=0;
void init(void)
  {
  DDRD|=0x3f;
  TCCR0=0x02; //->7,8125kHz SPI FSM Base Clock
  TIMSK|=(1<<TOIE0);
  TCCR2=0x04;
  TIMSK|=(1<<TOIE2);
  sei();
}

SIGNAL(SIG_OVERFLOW0)
  {
  static uint8_t temp=0, cbit=0, status=0;
  //SPI FSM for DOG-M LCD
  switch(fsm_spi_status)
    {
    case 0: //Init
      CLK_H;
      SDO_H;
      CSB_H;
      status=1;
      break;
    case 1:
      break; //NOP
    case 2: //Start Transfer
      CLK_H;
      SDO_H;
      CSB_L;
      status=3;
      temp=spi_dr;
      cbit=7;
      //beep=220;
      break;
    case 3: //Output bit and set CLK low
      if(temp&0x80)
        SDO_H;
      else
        SDO_L;
      CLK_L;
      if (cbit==0)
        status=5;
      else
        status=4;
      break;
    case 4: //Shift left data register, decrease bitcounter and set CLK 
high
      cbit--;
      temp<<1;
      CLK_H;
      status=3;
      break;
    case 5: //Set CLK high
      CLK_H;
      status=6;
      break;
    case 6: //Set CSB high and go to idle
      CSB_H;
      status=1;
      //beep=100;
      break;
  }
  fsm_spi_status=status;
}
SIGNAL(SIG_OVERFLOW2)
  {
  if (beep==0)
    BEEP_L;
  else
    {
    BEEP_T;
    TCNT2=beep;
  }
}
void delay(uint8_t time)
  {
  for(uint8_t t=0;t<time;t++)
    _delay_ms(1);
}
void _lcd_data(uint8_t data)
  {
  while(fsm_spi_status!=SPI_READY);
  RS_H;
  spi_dr=data;
  fsm_spi_status=SPI_START;
}
void _lcd_cmd(uint8_t data)
  {
  while(fsm_spi_status!=SPI_READY);
  RS_L;
  spi_dr=data;
  fsm_spi_status=SPI_START;
}

Autor: Tobias Frintz (tobias-frintz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hy
hab ich von nem anderen Forumuser vielleicht hilft des.
Tobi

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tobias

Hast du mal aufs Datum geschaut?

Autor: Tobias Frintz (tobias-frintz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy Obelix

Vielleicht guckt er trotzdem...

Tobi

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.