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