Hallo leute, ich bin am verzweifeln. ich versuche den ganzen tag schon den ADC meines ATmega 644 zum leben zu erwecken. Aber in der Hauptschleife kommt einfach nichts auf dem LCD an... ich verwende die LCD routinen aus dem avr-gcc tutorial. Code im Anhang ich dachte schon das sich LCD und ADC an PORTA in die Haare kommen, aber ich hab den ganzen code durchgeguckt und im LCD teil werden die nichtbenötigten Porta pins eigentlich immer schön ausmaskiert. Wär schön wenn mal einer drübergucken könnte...
Nimm doch für deine ersten Tests die ADC Routine aus dem Tutorial. Die funktioniert. Wenn du die am Laufen hast, kannst du immer noch anfangen sie zu verändern.
das hatte ich auch erst gemacht. Allerdings hatte ich da genau das gleiche problem. Das LCD bleibt einfach leer. Außerdem hab ich diese freerunning methode auf nem attiny einwandfrei am laufen, daran wirds also wohl nicht liegen...
Wobei allerdings auch interessant ist, was dein ADC macht, wenn LCD_PORT &= 0xF0; am Port rumpfriemelt. Leg doch das LCD auf einen anderen Port. Es ist sowieso keine gute Idee, wenn anderer Code am ADC-Port rumschaltet, wenn der ADC seine Messung macht (selbst wenns nicht am gleichen Pin ist)
Ich habe deine main loop mal teilweise "unrolled". Fällt Dir was auf?
1 | lcd_clear(); |
2 | |
3 | _delay_ms(100); |
4 | |
5 | lcd_string(itoa(result,buffer,10)); |
6 | lcd_clear(); |
7 | |
8 | _delay_ms(100); |
9 | |
10 | lcd_string(itoa(result,buffer,10)); |
11 | lcd_clear(); |
12 | |
13 | _delay_ms(100); |
14 | |
15 | lcd_string(itoa(result,buffer,10)); |
16 | lcd_clear(); |
17 | ....
|
hmja, das problem ist ich hab mir hier vor einiger zeit ein LCD lochraster modul für den SK500 header gebaut, und da ist es fest auf porta verlötet. Ich hab es auch nur zum testen dran, nacher wird über den adc wert eine PWM geregelt und das lcd kommt weg.
Tom schrieb: > Ich habe deine main loop mal teilweise "unrolled". Fällt Dir was auf? >
1 | > lcd_clear(); |
2 | >
|
3 | > _delay_ms(100); |
4 | >
|
5 | > lcd_string(itoa(result,buffer,10)); |
6 | > lcd_clear(); |
7 | >
|
8 | > _delay_ms(100); |
9 | >
|
10 | > lcd_string(itoa(result,buffer,10)); |
11 | > lcd_clear(); |
12 | >
|
13 | > _delay_ms(100); |
14 | >
|
15 | > lcd_string(itoa(result,buffer,10)); |
16 | > lcd_clear(); |
17 | > .... |
18 | >
|
Ach herrje, jetzt seh ichs auch :-) Klar, da wird man auf dem LCD nicht viel sehen :-) Und seine Fehlerbeschreibung lautet ja auch nicht: es wird immer 0 angezeigt, sondern "ich sehe nichts". itoa liefert immer irgendeine Zahl im Buffer. Nur wenn man die gleich weglöscht ....
Nichts desto trotz sollte beim Programmstart zumindest für 1 Sekunde "Welcome!" zu sehen sein.
Ephraim Hahn schrieb:
> und der lcd code. Header ist denke ich unwichtig
Und woher sollen wir dann wissen, an welchen Pins genau du dein LCD
betreibst?
ach verdammt, ich bin so ein Idiot... natürlich, und ja Welcome ist zu sehen! Ich danke Euch!
Hast du die Motorfader eigentlich schon am laufen? Habs inzwischen aufgegeben dich über deine Mailadresse zu kontaktieren, da bis jetzt jede Mail nach 8 Tagen zurück kam. Zitat:
1 | This message was created automatically by mail delivery software (Exim). |
2 | |
3 | A message that you sent could not be delivered to one or more of its |
4 | recipients. This is a permanent error. The following address(es) failed: |
5 | |
6 | ephraimhahn@*****.** |
7 | SMTP error from remote mailer after RCPT TO:<ephraimhahn@*****.**>: |
8 | host mail.*****.** [***.***.***.***]: 451-194.***.***.*** is not yet authorized to deliver mail from |
9 | 451 <magnetus@*****.**> to <ephraimhahn@*****.**>. Please try later.: |
10 | retry timeout exceeded |
Ich war mal eben so frei, einige Passagen im Zitat auszu-*-en.
so ne scheiße... irgendsowas hab ich mir schon gedacht, hab aber grad so viel um die ohren, dass ich dem noch nicht nach bin... Also, ich kümmer mich heut mittag drum und meld mich dann per pm bei dir. Ja die fader laufen soweit einwandfrei (hat nichts mit dieser ADC geschichte zutun...).
Hallo an alle, hab auch ein Problem mit dem ADC. Ich bin aber soweit, dass er mir den Wert 5V(1017)und 0VGnd(0000) am Lcd ausgiebt. Jetzt wollte ich natürlich zwischenwerte Testen und genau da ist mein Poblem. Wenn ich einfach ne 1,5V Batterie zwischen Gnd und PA3 (ADC-Eingang) hänge, zeigt mir mein LCD (0282) also den richtigen Wert an. Wenn ich aber mir nen Spannungsteiler am Steckbord aufbaue und an den ADC anschließe bricht die Spannung ein und am LCD wird dann natürlich nur 0000 angezeigt. Aufbau des Spannungsteilers hab ich angehängt. Den ADC betreibe ich mit AVcc als Referenz. Weiß irgend jemand wo mein Fehler liegt bzw. was ich falsch mache? Da ja werte angezeigt werden schätz ich mal liegts nicht am Programm, oder? Benutze das Atmel Evaluationsbord von Pollin mit nem Atmega16. Schon mal danke für euer bemühen. Grüße Andy
Funzt die 1,5V-Direktmessung auch an PA0? Wenn nich is vllt die JTAG-Fuse gesetzt und damit hat man pegel am A-Port liegen. Hatte nen ähnliches Problem mit nem ATMega32 wegen dieser Fuse. MfG Echo
Hallo Steffen, danke für deine Antwort. Das Fuse war zwar nicht das Problem, aber es hat mich auf die richtige Idee gebracht. Auf dem Pollin Bord kann man das LCD sehr bequem per Jumper an PORTA anschließen und ich wusste leider nicht, dass man die anderen PINS nicht belegen sollte wenn man den ADC verwendet; zumindest nicht zum ansteuern eines LCDs. Das mit der Batterie ist eigentlich ja auch klar. Ich konnte sie messen, weil die Spannung bei einer Spannungsquelle ja auch gegen Masse nicht einfach zusammenbricht. ;-) Kann man den PORTA bei nutzung des ADC eigentlich sonnst zu gar nix nutzen? Ich frag nur, weil ich ja nur einen benötige.
Andy schrieb: > Kann man den PORTA bei nutzung des ADC eigentlich sonnst zu gar nix > nutzen? > Ich frag nur, weil ich ja nur einen benötige. Du kannst sie schon nutzen (bis auf die Pins, die du als ADC Eingänge benutzt). Die generelle Empfehlung lautet: solange der ADC misst, sollten keine Schaltvorgänge an den anderen Pins dieses Ports gemacht werden.
Andy schrieb: > Auf dem Pollin Bord kann man das LCD sehr bequem per Jumper an PORTA > anschließen und ich wusste leider nicht, dass man die anderen PINS nicht > belegen sollte wenn man den ADC verwendet; zumindest nicht zum ansteuern > eines LCDs. Das liegt dann in der Regel an der LCD-Routine. Manchmal ist die fehlerhaft und beeinflußt auch die Pins des Ports, die sie nicht benötigt. Neuere AVRS haben ein Disable-Register, mit dem man die digitale Funktion der ADC-Pins abschalten kann. Dann können sich Softwarefehler der LCD-Routine nicht auswirken. Peter
>Du kannst sie schon nutzen (bis auf die Pins, die du als ADC Eingänge >benutzt). Die generelle Empfehlung lautet: solange der ADC misst, >sollten keine Schaltvorgänge an den anderen Pins dieses Ports gemacht >werden. Was macht man dann mit nicht genutzte PINS des ADC? Sollte man die dann einfach gegen Masse verdrahten? Und jetzt hab ich schon wieder was seltames. Wenn ich am Atmega16 an PB5 nen Taster hänge kann ich ihn nicht mehr programmieren, aber das liegt dann wohl daran, dass der Pin dann über nen 330nF Kondensator an Masse liegt und über PORTB programmiert wird. Ich glaub, langsam bin ich an nem Punkt angelangt, an dem ich mir meine Schaltung so aufbauen muss wie ich sie brauche.
Hi >Was macht man dann mit nicht genutzte PINS des ADC? Sollte man die dann >einfach gegen Masse verdrahten? Ignorieren. >Und jetzt hab ich schon wieder was seltames. Wenn ich am Atmega16 an PB5 >nen Taster hänge kann ich ihn nicht mehr programmieren, aber das liegt >dann wohl daran, dass der Pin dann über nen 330nF Kondensator an Masse >liegt und über PORTB programmiert wird. Genau.
> _delay_ms(1000);
Das ist mir noch aufgefallen
Das geht so vermutlich nicht - schau mal in die delay.h rein. Da steht
wie groß die Zahl in der Funktion werden darf (bei 2 MHz sind das nur
100ms oder so)
ich weiß jetzt aber nicht wie groß du deine Frequenz gewählt hast (hast du auch die Speed definiert?)
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.