Forum: Mikrocontroller und Digitale Elektronik ATmega8 und Nokia Display / SPI


von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich glaube ich stelle mich gerade unglaublich "dumm" an oder ich seh den 
Wald vor lauter Bäumen nicht.

Ich bin am sortieren und "aufhübschen" meiner selbstgeschriebenen 
Softwaremodule und eines macht gerade richtig Ärger:

Ich hab ein eigenes Experimentierbastelboard auf das ich u.a. ein Nokia 
Display 3410 einstecken kann.

Dieses Bastelboard hat immer absolut einwandfrei funktioniert (und tut 
es auch jetzt "eigentlich" noch).

Mein Softwaremodul funktioniert mit ATmega88  168  328p einwandfrei 
(alle 3 Typen ausprobiert). Aber urplötzlich will ein ATmega8 nicht 
(mehr). (Und ich weiß nicht, ob ich die Software auf einem ATmega8 
getestet hatte oder nicht, glaube aber doch).

==> meine Library funktioniert nicht mehr.

Also: Fehlersuche.

Ich habe mich dann soweit "nach unten" begeben und die Library mit 
Soft-SPI getestet und dann funktioniert ein rudimentäres Programm sogar 
auf einem ATtiny2313.

Nur will die Software auf einem ATmega8 nicht (auch nicht mit der 
Soft-SPI die auf allen anderen , inkl. Attiny2313) nicht funktionieren. 
Also, Steckbrett, das Ganze dort aufgebaut: gleiches Ergebnis. 
Pegelwandler mit Spannungsteilern UND mit HEF4050 ausprobiert, gleiches 
Ergebnis.

Okay, da war doch was mit der CKOPT Fuses, beides getestet, mit und ohne 
gesetztem Fusebit. Brownout Detektor an- und abgeschaltet: Mit ATmega8 
bleibt das Display tot.

Das Testprogramm (nicht die Library) mit dem die anderen Funktionieren 
kann man im Anhang sehen, die SPI Routinen (sind ja kurz) schreib ich 
hier mal rein:

/* -------------------- SPI Interface -------------------------- */


/* -------------------------------------------------------------
   SPI_INIT

   SPI-Softwareinterface der AVR MCU konfigurieren
   ------------------------------------------------------------- */

void spi_init(void)
// Pins der SPI Funktionen als Ausgang setzen
{
  SPI_DDR |= (1 << SPI_MOSI_PIN) | (1 << SPI_CLK_PIN) | (1 << 
SPI_SS_PIN);

}

/* -------------------------------------------------------------
   SPI_OUT

      Byte ueber Software SPI senden / empfangen
      data ==> zu sendendes Datum
   ------------------------------------------------------------- */
unsigned char spi_out(uint8_t data)
{
  char a;

  for (a=0;a<8;a++)
  {
    if((data & 0x80)> 0) { LCD_PORT |= (1 << SPI_MOSI_PIN); }
                    else { LCD_PORT &= ~(1 << SPI_MOSI_PIN); }

    LCD_PORT |= (1 << SPI_CLK_PIN);                           // 
Taktleitung auf 1
    LCD_PORT &= ~(1 << SPI_CLK_PIN);                          // und 
wieder auf 0

    data <<= 1;
  }
}

Hat irgendwer eine Idee an was das liegen könnte (schön langsam glaub 
ich fast, dass ATmega8 und ATmega88 vom Pinout nicht "kompatibel" sind)

Gruß, Ralph

von Ralph S. (jjflash)


Lesenswert?

:-( keiner hat (wie ich) eine Idee ?

von Max B. (theeye)


Lesenswert?

Etwas länger als zwei Stunden kannst du ruhig warten. Außerdem gibt es 
hier auch eine Umgebung für das korrekte Darstellen von Code...

Gruß Max

von Ralph S. (jjflash)


Lesenswert?

1
/* -------------------- SPI Interface -------------------------- */
2
3
4
/* -------------------------------------------------------------
5
   SPI_INIT
6
7
   SPI-Softwareinterface der AVR MCU konfigurieren
8
   ------------------------------------------------------------- */
9
10
void spi_init(void)
11
// Pins der SPI Funktionen als Ausgang setzen
12
{
13
  SPI_DDR |= (1 << SPI_MOSI_PIN) | (1 << SPI_CLK_PIN) | (1 << 
14
SPI_SS_PIN);
15
16
}
17
18
/* -------------------------------------------------------------
19
   SPI_OUT
20
21
      Byte ueber Software SPI senden / empfangen
22
      data ==> zu sendendes Datum
23
   ------------------------------------------------------------- */
24
unsigned char spi_out(uint8_t data)
25
{
26
  char a;
27
28
  for (a=0;a<8;a++)
29
  {
30
    if((data & 0x80)> 0) { LCD_PORT |= (1 << SPI_MOSI_PIN); }
31
                    else { LCD_PORT &= ~(1 << SPI_MOSI_PIN); }
32
33
    LCD_PORT |= (1 << SPI_CLK_PIN);                  // CLK auf 1
34
    LCD_PORT &= ~(1 << SPI_CLK_PIN);                 // und wieder auf 0
35
36
    data <<= 1;
37
  }
38
}

Besser? ... hatte ich bisher noch nie verwendet weil ich Code immer nur 
im Anhang gepostet hab, vielen Dank für den Hinweis für die "Umgebung 
für Code-Darstellung"

von Ralph S. (jjflash)


Lesenswert?

Auch wenn niemand hier geschrieben hat, das "Problem" hat sich erledigt 
(und es ist "unglaublich").

Irgendwie konnte ich das nicht glauben dass das nicht geht (und auch 
nicht, dass ich die Library nicht getestet hatte für ATmega8, vor allem 
weil ich im Kopf hatte, dass ein Gerät eben genau mit einem 8er gemacht 
wurde). Also kam ich auf die glorreiche Idee (weil ich die SPI 
Anschlüsse in Verdacht hatte) die nicht funktionierenden 8er (deren 
Portpins ansprechbar sind) in eine USBasp Schaltung zu stecken und siehe 
da: da funktionieren sie auch nicht !

Von 5 fabrikneuen ATmega8 funktionieren 3 nicht !!!!

Einen Tag für umsonst gesucht und getan ohne dass ich "schuld" war.

Verrückt allerdings, dass ein langsames blinken auf den Pins MOSI und 
SCK per Bitbanging dennoch geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.