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
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
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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.