Forum: Mikrocontroller und Digitale Elektronik AVR mit dem ADC Verzweifeln


von Ephraim H. (ephi)


Angehängte Dateien:

Lesenswert?

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...

von Ephraim H. (ephi)


Angehängte Dateien:

Lesenswert?

und der lcd code. Header ist denke ich unwichtig

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ephraim H. (ephi)


Lesenswert?

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...

von Karl H. (kbuchegg)


Lesenswert?

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)

von Tom (Gast)


Lesenswert?

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
    ....

von Ephraim H. (ephi)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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 ....

von Magnus Müller (Gast)


Lesenswert?

Nichts desto trotz sollte beim Programmstart zumindest für 1 Sekunde 
"Welcome!" zu sehen sein.

von Magnus Müller (Gast)


Lesenswert?

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?

von Ephraim H. (ephi)


Lesenswert?

ach verdammt, ich bin so ein Idiot... natürlich, und ja Welcome ist zu 
sehen!

Ich danke Euch!

von Magnus Müller (Gast)


Lesenswert?

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.

von Ephraim H. (ephi)


Lesenswert?

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...).

von Andy (Gast)


Angehängte Dateien:

Lesenswert?

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

von Magnus Müller (Gast)


Lesenswert?

Dann schließ den Schleifer halt an PA3 an und nicht an PA0.

von Steffen I. (echo)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Andy (Gast)


Lesenswert?

>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.

von spess53 (Gast)


Lesenswert?

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.

von Blumi (Gast)


Lesenswert?

> _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)

von Blumi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.