Forum: Compiler & IDEs Eingang ADC nutzen


von Achim S. (achims)


Lesenswert?

Hallo
habe da ein problem, vielleicht kannes mir jemand erklären
Beim ATmega 128 liegen auf dem PF 4 und PF5 zwei ADC Eingänge. Wenn ich 
diese verwenden möchte, kann ich sie z.B. mit

adc_init (IO_INPUT_2_BIT) usw ansprechen. ( in C )

Wie kann ich sie als "normale" In oder Out ansprechen, nur zur Messung 
ob einen Spannung anliegt oder nicht?
achim

von Karl H. (kbuchegg)


Lesenswert?

Achim Seeger schrieb:

> Wie kann ich sie als "normale" In oder Out ansprechen, nur zur Messung
> ob einen Spannung anliegt oder nicht?

ganz normal, so wie du auf jeden anderen Port Pin auch zugreifst.

Die 'ADC-Funktionalität' wird, so wie alle alternativen Funktionen auf 
allen Pins, erst dadurch aktiviert, dass du den ADC einschaltest und den 
ADC-Multiplexer auf diesen Pin ansetzt.

Aber abgesehen davon ist das ein ganz normaler Input Pin, den man über 
das zugehörige PIN Register abfragen kann.

von Achim S. (achims)


Lesenswert?

Hallo Karl heinz
Ich hatte das z.B. für den PD6 so gemacht

// eingang einrichten
    DDRD &=~ (1<<PIND6);
    PORTD |= (1<<PIND6);

Danach hatte ich es für den PF4 so gemacht

// eingang einrichten
    DDRF &=~ (1<<PINF4);
    PORTF |= (1<<PINF4);

und bekomme eine Fehlermeldung. PF4 und 5 sind beim 128 die ADC. Habe 
leider die Fehlermeldung nichz kopiert. Versuche es noch mal.
achim

von Karl H. (kbuchegg)


Lesenswert?

Achim Seeger schrieb:
> Hallo Karl heinz
> Ich hatte das z.B. für den PD6 so gemacht
>
> // eingang einrichten
>     DDRD &=~ (1<<PIND6);
>     PORTD |= (1<<PIND6);
>
> Danach hatte ich es für den PF4 so gemacht
>
> // eingang einrichten
>     DDRF &=~ (1<<PINF4);
>     PORTF |= (1<<PINF4);
>
> und bekomme eine Fehlermeldung.

Dann lies die Fehlermeldung.

> PF4 und 5 sind beim 128 die ADC.

Das interessiert aber den Compiler nicht.

Wenn du eine Fehlermledung bekommst, dann hast du irgendeinen 
syntaktischen Fehler gemacht. Aber den COmpiler interessiert deine 
Programmlogik nicht die Bohne. Dem ist das wurscht ob du an PORTF etwas 
zuweist oder nicht und was das bewirkt. Das einzige was ihn interessiert 
ist: gibt es dieses PORTF überhaupt und wo liegt es im Speicher, so dass 
ich das Bitmuster dorthin platzieren kann.

Alles darüber hinausgehende ist dein Bier und lässt den Compiler völlig 
kalt.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Alles darüber hinausgehende ist dein Bier und lässt den Compiler völlig
> kalt.


Ich vergleich das ganz gerne immer mit dem Duden

Der deutsche Satz

   "Das Flugzeug hört die Baumwurzel mit chinesischen Protuberanzen."


ist nach allen Regeln der deutschen Sprache ein gültiger deutscher Satz. 
Alle Wörter stehen im Duden und auch alle Regeln wurden befolgt.

Und trotzdem ist er einfach nur ganz großer Unsinn.

Einen Compiler interessiert die Aussage des Satzes nicht. Der überprüft 
ob alle Wörter im Duden stehen und ob die Sprachregeln eingehalten 
wurden. Ein Compiler gibt für diesen Satz sein ok.

Nicht jedoch für

   "Das Flugzeug hört das Baumwurzel mit chinesischen Protuberanzen."

denn der Artikel für Baumwurzel ist falsch.
Es wäre jetzt aber völlig verkehrt, aus einer Fehlermeldung zu 
schlussfolgern, dass der Compiler erkannt hätte, dass man eine 
Baumwurzel nicht hören kann. Das ist ein Faktum, welches den Compiler 
einfach nicht interessiert. Er macht keine dahingehende Analyse! Das 
Verb 'hören' verlangt den 4. Fall (Akkusativ) und nur das ist es, was 
den Compiler interessiert - der zu benutzende Artikel für den 4. Fall 
für "Baumwurzel" lautet 'die' und nicht 'das'. Und da dieses in diesem 
Satz nicht so ist, setzt es eine Fehlermeldung.

Das eine ist die Syntax - die Sprachregeln
Das andere ist die Semantik - die Aussage, die ein Satz macht

Der Compiler interessiert sich nur für Syntax.

von Xenu (Gast)


Lesenswert?

>Der Compiler interessiert sich nur für Syntax.

Das stimmt so definitiv nicht. Es gibt sehr wohl eine semantische 
Analyse, in jedem Compilerlehrbuch wirst Du das finden.

Beispiel:

uint32_t var;
uint32_t* p;

[...]

var += 1;
p += 1;

Selbe Syntax, andere Bedeutung (Semantik).
Die Variable wird um 1 erhöht, der Zeiger aber um 4, da er ja auf 
32-Bit-Speicherstellen zeigt. Der Compiler macht hier eine semantische 
Analyse bezüglich der Datentypen und der auf sie angewandten 
Operationen.

Was Du mit Semantik wohl meintest, ist die komplette Bedeutung des 
Programms (so wie der Programmierer sie im Sinn hat), und das kann der 
Compiler natürlich nicht.

von Karl H. (kbuchegg)


Lesenswert?

Xenu schrieb:
>>Der Compiler interessiert sich nur für Syntax.
>
> Das stimmt so definitiv nicht. Es gibt sehr wohl eine semantische
> Analyse, in jedem Compilerlehrbuch wirst Du das finden.

Ich denke aus dem zweiten Beispiel ist klar hervorgegangen, wie die 
Sache mit der Samantik gemeint ist.

Das der Compiler natürlich den Statements eine Bedeutung zuweist, sollte 
eigentlich klar sein. Dazu schreibt man ja die Statements hin.
Das
  i++
und
  i--
unterschiedliche Semantik hat und das die beteiligten Datentypen dann 
auch noch diese Semantik modifizieren können, sollte eigentlich klar 
sein.


> Was Du mit Semantik wohl meintest, ist die komplette Bedeutung des
> Programms (so wie der Programmierer sie im Sinn hat), und das kann der
> Compiler natürlich nicht.


Ich habe in diesem Kontext hier operiert (und ich denke aus dem zweiten 
Post ist das mehr als klar hervor gegangen)

> Danach hatte ich es für den PF4 so gemacht
>
> // eingang einrichten
>     DDRF &=~ (1<<PINF4);
>     PORTF |= (1<<PINF4);
>
> und bekomme eine Fehlermeldung. PF4 und 5 sind beim 128 die ADC.

aus dem ich zu erkennen glaube, dass der TO annimmt, dass der Compiler 
iregndwie einen Zusammenhang zwischen den Portpins und dem ADC herstellt 
und ihm die Operation deswegen nicht gestattet ('bekomme eine 
Fehlermeldung'), weil es sich um die Portpins des ADC handelt und er den 
ADC an anderer Stelle im Programm benutzt.

Und dem ist nun mal nichts so.

Und es sei auch noch gesagt, dass diese Annahme bei Neulingen gar nicht 
mal so selten verbreitet ist, weswegen ich hier weiter ausgeholt habe. 
Für Neulinge ist der Compiler sowas wie der "Wunderwutzi", der alles 
überprüft und wenn der Compiler keine Fehlermeldung ausgibt, dann muss 
das Programm ja auch funktionieren - schliesslich hab ich ja keine 
Fehlermeldung bekommen, die ich ganz sicher gekriegt hätte, wenn etwas 
nicht stimmen würde.

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.