Hallo, erstmal Verzeihung für den Titel, das Board frustet mich ziemlich :-) Ich habe ein Problem mit o.g. Board (was auch sonst). Ich möchte hier bitte keine Diskussion über Qualität der Pollin Produkte auslösen und bitte alle herzlichst davon Abstand zu nehmen. Mein Problem: Ich habe ein einfaches Programm, das "hallo" auf ein LCD schreibt. Das ging bisher einwandfrei, jetzt bleibt das Display neuerdings schwarz (alle Pixel an). Wenn ich jetzt den Stecker zum EvaBoard ein paar Mal rein raus ziehe, springt der ATmega16 irgendwann an und das erwartete "hallo" erscheint. Kann sich bzw. mir irgendjemand erklären, was das Problem sein kann? Ich habe keine Veränderungen vorgenommen. Das Programm lief vorher tadellos, und am nächsten Tag nicht mehr. Vielen Dank.
Die Resetzeit des LCD's könnte sich verlängert haben (Alterung, zb: Kontakte, Kondensatoren...) Verlängere mal die Wartezeit bis zur Initialisierung des LCD's.
Klingt nach einem Timing Problem, verlängere mal die delay loop in der Display Initialisierung. Dein LCD-Controller braucht länger zum booten als der Avr... Gruß Jonas
Hallo, Eventuell ein Timing Problem beim Initialisieren des LCD. Mal gehts mal nicht. Das liegt aber nicht am Board. Gruß Bernd
Danke für die bisherigen Posts. Das werde ich probieren. Nach Feierabend teste ich es mal. Klaus Wachtler schrieb: > Welchen Stecker? Strom? ISP? Geflasht wird über ISP. Strom kommt vom Board. ----------- Was ich noch dazusagen sollte: Wenn er diesen "hänger" hat, lässt er sich auch nicht flashen.
1 | Entering programming mode... FAILED |
Das spricht eher gegen ein Software-Initialisierungsproblem, oder? Klaus Wachtler schrieb: > Welchen Stecker? Strom? ISP?
Das klingt so als ob der Programmer es nicht schafft den Controlller in den Reset zu zwingen. Was hasten fürn Widerstand am Reset ? Wie sieht deine Spannungsversorgung aus? Gruß Jonas
Jonas Biensack schrieb: > Das klingt so als ob der Programmer es nicht schafft den Controlller in > den Reset zu zwingen. Was hasten fürn Widerstand am Reset ? > Wie sieht deine Spannungsversorgung aus? > > Gruß Jonas Alles Pollin-Board originalwerte: Der Reset hängt über 10k an 5V.
Länge Kabel vom PC zum ISP Stecker des Boards? Hatte da mal Probleme weil ich Horst halt unbedingt den Controller im Nebenraum flashen wolllte... Gruß Jonas
Scheint das Dein µC nicht richtig läuft. Überprüfe mal die Stromversorgung. Schau auch mal nach kalten Lötstellen im Bereich Reset, Stromversorgung, evt. Quarz...
Manfred John schrieb: > Schau auch mal nach kalten Lötstellen im Bereich Reset, Stromversorgung, > evt. > Quarz... Hab ich soweit es geht bereits. Nichts gefunden. Auch ist der ISP vom Programmer bis zu den uC Pins richtig connected. Ich hätts damals besser als Bausatz gekauft, dann könnte ich sowas ausschließen :-)
Taktprobleme? Schwingt der Quarz (falls verwendet)? Fuses für genügend lange Anschwingzeit gewählt?
Dietrich L. schrieb: > Taktprobleme? Schwingt der Quarz (falls verwendet)? Fuses für genügend > lange Anschwingzeit gewählt? Noch nicht. Wird ebenfalls ausprobiert. Danke für den Tipp.
Alle mögliche Delay TImes, und auch die max. Anlaufzeit für den Quarz haben keinen Erfolg gebracht. Hat noch einer eine Idee? In der zwischenzeit geh ich mal auf die Suche nach einem Hardwaredefekt.
Ein sehr einfaches und vor allem übersichtliches Testprogramm findest Du hier: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296 Ich hab auch mal längere Zeit nen blöden Fehler gesucht: Der /WR-Pin hatte keinen richtigen Kontakt zu GND, sondern hing in der Luft. Peter
ich habe jetzt ein sehr interessantes Phänomen: Ich habe jetzt eine Testschaltung auf Platine aufgebaut und das Problem ist das gleiche. Ich verwende eine völlig andere Stromquelle und auch der Quarz ist ein anderer. Also ist es doch ein Software oder COntroller Problem? Ich verzweiel... arrr....
Das Pollin-Board hat einen Gleichrichter aus Dioden, der eher als Verpolungsschutz dient. EIn 7805-Regler macht aus der Spannung 5 V mit maximalen 500mA. Wennd as Board mehr als nur einen Chip zu versorgen hat, so kann die Spannung einbrechen. Bei mir ist die bei der Nutzung eines Servos die Spannung so eingebrochen, dass der Prozessor resetted wurde, die LED hat geflackert.
Hartmut Wagener schrieb: Wennd as Board mehr als nur einen Chip zu versorgen > hat, so kann die Spannung einbrechen. Bei mir ist die bei der Nutzung > eines Servos die Spannung so eingebrochen, dass der Prozessor resetted > wurde, die LED hat geflackert. Das kann ich ausschließen. Ich betreibe den ATmega16 mit 16MHz Quarz. Eingestellt habe ich bei den Fuses: Ext. Crystal 16k CK + 64ms. Das ist doch sehr konservativ und müsste auf Nummer sich er sein, oder? Keiner mehr eine Idee?
TicTac schrieb: > Keiner mehr eine Idee? Überprüfe mal den Transistor, der Reset nach GND zieht. Ersetze ihn mal durch einen Transistor mit höherer Stromverstärkung. ...
>Ich betreibe den ATmega16 mit 16MHz Quarz. Eingestellt habe ich bei den >Fuses: Ext. Crystal 16k CK + 64ms. Das ist doch sehr konservativ und >müsste auf Nummer sich er sein, oder? > >Keiner mehr eine Idee? BOD Fuses auf höchsten Wert stellen. Alternativ ein dickes Delay mit mindestestens 250ms vor LCDInit().
Ich wiederhole nochmal: Ich habe mit nem einfachen 7805 ne extra Platine aufgebaut, auf der weiter nichts ist als die Grundschaltung wie sie hier zu sehen ist aufgebaut: http://www.rn-wissen.de/index.php/Bild:Avrtutorial_grundschaltung_mitquarz.gif Vor dem 7805 habe ich eine 9V-Block Batterie. Ich habe also kein Teil vom Board verwendet, sondern alles neu aufgebaut. Gleicher Effekt: Die LED am Ausgang bleib aus. Nachdem ich die Stromversorgung unterbrochen habe geht sie irgendwann dann doch an und blinkt wie sie soll.
>Vor dem 7805 habe ich eine 9V-Block Batterie. Ich habe also kein Teil >vom Board verwendet, sondern alles neu aufgebaut. Gleicher Effekt: Die >LED am Ausgang bleib aus. Nachdem ich die Stromversorgung unterbrochen >habe geht sie irgendwann dann doch an und blinkt wie sie soll. Schaltungsproblem, ganz eindeutig. Mach es richtig, dann gehts auch. Da fehlen doch irgenwelche Leitungen. Ob VCC oder GND musst du selber suchen.
Du meinst die Platine hat genau da einen Kabelbruch, wo ich jetzt beim Neuaufbau eine vergessen habe? Eher unwarscheinlich. Schaltungsfehler schließe ich aus. µC habe ich gewechselt. Display habe ich auch gewechselt. Ich vermute ein Softwareproblem. Das Programm macht jedoch nur folgendes:
1 | int main(void) |
2 | {
|
3 | //initial values
|
4 | initIO(); |
5 | initExtInt(); |
6 | |
7 | _delay_ms(500); //test |
8 | lcd_init(LCD_DISP_ON); |
9 | _delay_ms(500); //test |
10 | |
11 | lcd_clrscr(); |
12 | lcd_gotoxy(0,0); |
13 | lcd_puts("hallo"; |
14 | |
15 | sei(); |
16 | |
17 | while(1) |
18 | { ; } |
19 | |
20 | return 0; |
Hallo erscheint eben nur sproradisch :-/
Sorry nicht genau ausgedrückt oben: Du meinst das Programmierboard hat exakt den gleichen Defekt wie ich bei meinem Neuaufbau gestern Abend? Das glaube ich nicht. Ich habs ja extra zum testen neu aufgebaut.
Fummler schrieb: > Das Programm macht jedoch nur folgendes: Das sind ja alles unbekannte Funktionsaufrufe, damit kann keiner was anfangen. Du mußt schon den Code aller benutzten Funktionen posten. Ein Programm muß ohne Warnungen und Fehler compilierbar und linkbar sein. Erst dann kann man was dazu sagen. Peter
Sorry. Wollte es aufs wesentliche beschränken
1 | //working machine: ATmega16
|
2 | #ifndef F_CPU
|
3 | #define F_CPU 16000000UL
|
4 | #endif
|
5 | |
6 | #include "lcd.h" //by Peter Fleury |
7 | #include <util/delay.h> |
8 | #include <avr/interrupt.h> |
9 | #include <avr/io.h> |
10 | |
11 | |
12 | void initIO() |
13 | {
|
14 | //DAC = OUTPUT
|
15 | DDRD |= 0xF0; //for Higher Nibble |
16 | DDRB |= 0xF0; //for Lower Nibble |
17 | //LCD = OUTPUT
|
18 | DDRA = 0xFF; |
19 | //Keys = INPUT
|
20 | DDRC = 0xFF; |
21 | DDRC &= ~(_BV(PC0) | _BV(PC1) | _BV(PC6) | _BV(PC7)); |
22 | }
|
23 | |
24 | void initExtInt() |
25 | {
|
26 | //INT0, INT1, INT2 = falling edge
|
27 | MCUCR |= _BV(ISC11) | _BV(ISC01); |
28 | MCUCSR &= ~(_BV(ISC2)); |
29 | GICR |= _BV(INT0) | _BV(INT1) | _BV(INT2); |
30 | }
|
31 | |
32 | |
33 | int main(void) |
34 | {
|
35 | //initial values
|
36 | initIO(); |
37 | initExtInt(); |
38 | _delay_ms(500); //test |
39 | lcd_init(LCD_DISP_ON); |
40 | _delay_ms(500); //test |
41 | |
42 | lcd_clrscr(); |
43 | lcd_gotoxy(0,0); |
44 | lcd_puts("hallo"); |
45 | |
46 | sei(); |
47 | |
48 | while(1) |
49 | {;}
|
50 | |
51 | return 0; |
52 | }
|
Das Ergebnis ist ein schwarzes LCD
TicTac schrieb: > Sorry. Wollte es aufs wesentliche beschränken Wesentlich wären ja die LCD-Routinen und die fehlen. Vermutlich sind auch einige Defines nötig. Peter
Schleierhaft ist mir aber, warum ich dann wenn es hängt nicht flashen kann. Der Atmega verweigert dann jeden Dienst!
TicTac schrieb: > sei(); Wofür ist das sei() gut? Um die INTx-Interrupts aus initExtInt() freizuschalten? Wo sind Deine Interrupt-Service-Routinen dazu? Kommentiere das sei() und den Aufruf von initExtInt() aus und teste nochmal. Oder brauchen die LCD-Funktionen Interrupts? Wenn ja, welche?
Nur als Tip am Rande, mit Flachbandkabeln als Verbindung zwischen Programmer (bei mir STK500) und Zielbaugruppe hatte ich wg. Wackelkontakten schon öfters Ärger. Die Fehlerbilder waren ähnlich. Wenn die Pfostenstecker mit Zugentlastungen versehen sind wird die Sache deutlich stabiler.
Ja, das sei ist für die externen Interrupts um sie freizuschalten. Ich habe die ISRs aber alle Schritt für Schritt bei der Fehlersuche rausgeworfen. Gruß TicTac
Guter Rat schrieb: > Nur als Tip am Rande, mit Flachbandkabeln als Verbindung zwischen > Programmer (bei mir STK500) und Zielbaugruppe hatte ich wg. > Wackelkontakten > schon öfters Ärger. Die Fehlerbilder waren ähnlich. Wenn die > Pfostenstecker > mit Zugentlastungen versehen sind wird die Sache deutlich stabiler. Habe ich auch überprüft. Keine Fehler im Kabel :-/
TicTac schrieb: > Ich habe die ISRs aber alle Schritt für Schritt bei der Fehlersuche > rausgeworfen. Sehr gut, dann funktioniert garantiert nichts. Jeder Interrupt macht dann ein Reset. ISRs darf man erst dann rausnehmen, wenn der dazugehörende Interrupt disabled ist. Peter
Peter Dannegger schrieb: > Sehr gut, dann funktioniert garantiert nichts. > Jeder Interrupt macht dann ein Reset. > > ISRs darf man erst dann rausnehmen, wenn der dazugehörende Interrupt > disabled ist. > > > Peter Danke. Wird heut Abend ausprobiert.
Zusatz: Problem bestand aber auch, als die ISRs noch drin waren. Und wenn der uC dann mal läuft, dann geht alles einwandfrei. Nur das "Anspringen" nicht... :-/ frust
Fuse den AVR mal auf interne 8MHZ RC-Takt. Quarze können manchmal sterben oder schlecht anschwingen. Das würde auch die Programmierprobleme erklären. Peter
Peter Dannegger schrieb: > Fuse den AVR mal auf interne 8MHZ RC-Takt. > Quarze können manchmal sterben oder schlecht anschwingen. > Das würde auch die Programmierprobleme erklären. > > > Peter Ich habe das Problem wie gesagt auch auf der extra Platine. Dort habe ich nen anderen Quarz, andere Kondensatoren, anderen Spannungsregler usw. Das MUSS am uC, bzw. an der Software liegen :-D
> Vor dem 7805 habe ich eine 9V-Block Batterie.
Frisch oder schon fast leer gelutscht?
Krapao schrieb: >> Vor dem 7805 habe ich eine 9V-Block Batterie. > > Frisch oder schon fast leer gelutscht? Frisch. Ich suche schon eine ganze Weile nach dem Fehler.
TicTac schrieb: > Ich habe das Problem wie gesagt auch auf der extra Platine. Dort habe > ich nen anderen Quarz, andere Kondensatoren, anderen Spannungsregler > usw. Das MUSS am uC, bzw. an der Software liegen :-D Dann mach doch mnal ein schlichtes Programm ohne Interrupts, nur eine Endlosschleife mit delay_irgendwas() und ein Pin wackeln. Wenn das dann auch zickt, weiß man wo man suchen muß. Bauchgefühl: das wird funktionieren.
Probier mal mein Testprogramm aus dem obigen Link aus. Das ist nicht so riesengroß und unübersichtlich, wie das Fleury-Zeugs. Und wenn das auch nicht geht, dann poste es mal komplett mit Deinen angepaßten Defines als Zip. Peter
TicTac schrieb: >>> Vor dem 7805 habe ich eine 9V-Block Batterie. >> >> Frisch oder schon fast leer gelutscht? > > Frisch. Ich suche schon eine ganze Weile nach dem Fehler. Auch nen anderen Clip für den 9V Block benutzt? Die machen auch gern mal ärger.
> Schleierhaft ist mir aber, warum ich dann wenn es hängt nicht flashen > kann. Der Atmega verweigert dann jeden Dienst! Dann kann es IMHO doch nur am Oszillator liegen. CKOPT gesetzt?
Ich werde alles hier genannte mal ausprobieren. Problem ist nur, dass ich nichtmal zum flashen komme. Ich muss den Stecker etliche male ziehen bis er anspringt. Und erst dann kann ich flashen. :-/
Volker schrieb: > Dann kann es IMHO doch nur am Oszillator liegen. > CKOPT gesetzt? Das sagt mir nichts.
TicTac schrieb: > Crystal 16k CK + 64ms. Das ist doch sehr konservativ und > müsste auf Nummer sich er sein, oder? Nein, 16 MHz ist nah am Limit. Da musst Du CKOPT aktivieren (full swing) und ggf. auch das Timing des LCD-Zugriffs überprüfen, besonders die Wartezeit vor dem Initialisieren. ...
Nur mal so am Rande: Hast Du die beiden 15..30pF Kondensatoren am Quarz drann? Wenn ja, passen diese zu den Daten vom Quarz und nicht nur zum Datenblatt vom AVR? Wenn diese Cs fehlen, schwingt das Quarz nicht an, wenn deren Werte falsch sind, bzw. nicht zum Quarz passen, dann schwingt das Quarz auf einer falschen Oberwelle und liegt dann fernab von dem, was der AVR verarbeiten kann. Gruß, Ulrich
Ulrich P. schrieb: > Nur mal so am Rande: > Hast Du die beiden 15..30pF Kondensatoren am Quarz drann? Wenn ja, > passen diese zu den Daten vom Quarz und nicht nur zum Datenblatt vom > AVR? 2x 22pf wo sie hingehören. Betreibe es schon seit jahren in dieser Konfiguration. Das Board lief auch tadellos bisher.
Jetzt komm ich mit dem ISP nicht mehr ran um die Fuses einzustellen. Er verweigert jeden Dienst :-/
Also ich habe besagtes CKOPT Fuse gebrannt und alles was mit lcd zu tun hat rausgeworfen. Es läuft stabil. Ich zieh immer mal wieder den Stecker, aber es scheint zu funktionierten. Später will ich dann mal die lcd Funktionen von Peter Danegger reinhauen. Danke für die vielen Hilfreichen Beiträge bisher.
Volker schrieb: >> Schleierhaft ist mir aber, warum ich dann wenn es hängt nicht flashen >> kann. Der Atmega verweigert dann jeden Dienst! > > Dann kann es IMHO doch nur am Oszillator liegen. > CKOPT gesetzt? Was soll ich sagen? Es läuft. Ich danke dir. 4 Tage fehlersuche... :-( CKOPT CKOPT CKOPT CKOPT CKOPT CKOPT CKOPT
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.