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