Hi Sitze schon wieder nee ganze weile an neem Problem mit meinem Atmega32. Programmiere gerade eine LCD Ausgabe mit über PortB mit Peters Lib. Hab ich vorher auch schon alles mit neem Atmega8 gemacht und hat alles super geklappt. Leider geht das mit dem Atmega32 nicht so toll irgendwie. Programmiere mit GCC und aufspielen mit STK500 und WINAVR. Hab beim Atmega8 PortD benutzt und wollte nun mal fragen ob da irgend eine Doppelbelegung von PortB automatisch an ist? Auserdem ist es kommisch sobald ich einen PORT per DDRX als Ausgangdeklariere leuchten bei mir aufm STK alle LEDs des Ports wenn ich sie anschließe ohne den Pullup aktiviert zu haben. JTAG hab ich auch aus gemacht. Und die Zusatzfunktionen wie sie im Datenblatt beschrieben sind nutze ich auch alle nicht von PortB. Jemand nee Idee? Gruß und gute Nacht noch Daniel.
<Auserdem ist es kommisch <sobald ich einen PORT per DDRX als Ausgangdeklariere leuchten bei mir <aufm STK alle LEDs des Ports wenn ich sie anschließe ohne den Pullup <aktiviert zu haben. Wunderbar, d.h. es funktioniert :-) Die Leds sind low aktiv, sie gehn an wenn du deinen Port als Ausgang deklarierst mit Low Pegel.
Hatte das gleiche Problem auf nem Mega32. Die JTAGEN-Fuse invertieren (standard ist: an)-
PB6 und PB7 sind auch die Anschlüsse für nen externen Quarz, also die Fuses checken ! Wenn er mit internem RC Oszillator läuft, dann gehts.
> PB6 und PB7 sind auch die Anschlüsse für nen externen Quarz,
Nö, das sind PC6 und PC7. Warum schaut eigentlich keiner mal ins
Datenblatt, bevor er hier irgendwas schreibt?
BTW: Der "externe Quarz" an PC6 und PC7 ist nur für den asynchronen Betrieb von Timer 2. Für den Hauptoszillator hat der Mega32 separate Anschlüsse...
Hi Sorry hatte die letzten 2 Tage kein I-Net zum antworten (Telekom). Also hab mal alles getestet aber leider ohne erfolg. Als Anhang hab ich mal meine geänderte lcd.h beigefügt. Hab auch mal auf der Platine alles nochmal durchgemessen aber stimmt auch alles. Hab immer die oberste Reihe voller Blocke also keine Initialisierung. Hier auch mal der Code ist auch übersichtlich: // RS = PB0 // R/W = PB1 // E = PB2 // D4 = PB3 // D5 = PB4 // D6 = PB5 // D7 = PB6 #include <stdlib.h> #include <avr/io.h> #include <lcd.h> #include <lcd.c> int main(void) { DDRB = 0xFF; lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_gotoxy(0,0); lcd_puts("Hallo"); for(;;) { } } Habs auch schon ohne DDRB versucht aber leider auch ohne erfolg. Wünsch euch noch nee gute nacht. Gruß Daniel
Den DDRB kannst du in Ruhe lassen. Alle Einstellungen werden in lcd.h gemacht. Wenn dort alles richtig ist, die Hardware auch entsprechend der in lcd.h gemachten Einstellungen angeschlossen ist, dann gibt es keinen Grund mehr warum das LCD nicht funktionieren sollte. PS: lcd.c solltest du nicht includieren. lcd.c wird zum Projekt hinzugefügt, seperat compiliert und zum kompletten Programm dazugelinkt. Beim AVR-STudio machst du das indem du bei den Source Files auf die rechte Maustaste drückst, "Add existing source Files" auswählst und danach dem AVR-STudio die lcd.c zeigst. Dadurch weiss AVR-Studio, dass diese *.c auch noch zum Projekt gehört und kümmert sich entsprechend darum.
@Buchegger Programmiert wird mit Winavr. Übertragen wird es nur mit avr Studio. Deswegen hab ich es per include eingebunden ansonsten ist mir keine andere möglichkeit bekannt. Hmm kann das was mit der Taktfrequenz zu tuen haben? Dachte gerade daran das mein Mega32 im moment mit internem Oszi 1MHz läuft. aber er wartet doch eh auf die busy flag oder? MFG Daniel
So hab mal wieder ein bischen mehr rumspielt und denke es liegt am ISP der ja auch auf dem PortB hängt. Wenn ich den LCD an andere Ports hänge klappt es sofort. Meine nexte frage wäre dann kann ich den ISP irgendwie freigeben? Ich weis das ich den zum Programmieren brauch. Vielleicht gibt es da noch nee andere lösung. Hab das STK500 Board von Atmel. Wäre echt schade wenn nicht hab extra ne Platine geätzt und leider ist der LCD auf PortB. So ich guck dann mal weiter nach neer lösung.
> So hab mal wieder ein bischen mehr rumspielt und denke es liegt am > ISP der ja auch auf dem PortB hängt. Zieh doch einfach mal den Programmer während deiner Tests ab. Sobald ausser dem LCD nichts mahr am µC PORTB hängt, gibt es keinen grund mehr warum das nicht gehen sollte. (Was mich eher verwundert: dass du trotz angehängtem LCD noch programmieren kannst) > Programmiert wird mit Winavr. Übertragen wird es nur mit avr > Studio. Deswegen hab ich es per include eingebunden ansonsten > ist mir keine andere möglichkeit bekannt. Das macht es auch nicht richtiger.
Also Proggen geht nur wenn ich den lcd Abgezogen hab beim PortB. Wenn ich ich dann wieder dran Stecke klappt es nach mehrmaligem reseten mehr oder weniger (mal initaliesiert er mal den haben text mal fast alles) je nachdem. Dachte immer wenn ich den Mikro vom STK500 runter nehme auf meine Platine dann ist das kein Problem mit dem SPI pins.
Das darf nicht sein ich habs gefunden. Kalte Lötstelle. Alles klappt wie es soll. Ich möchte mich trotzdem noch mal bei Herr Buchegger und allen anderen für die nette Hilfe bedanken. Tut mir schon ein wenig leid die Zeit von euch so verplemmpert zu haben aber ich habs 3 mal gemessen und 3 mal hatte ich durchgang. Hoffe ihr nehmt es mir nicht zu übel. Gruß und nochmals Danke Daniel
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.