Hallo Liebe Gurus,
ich komme nicht weiter und finde im Internet sowie hier im Forum oder im
Tutorial Hilfe. Ich bin gespannt was das Problem ist.
Eigentlich wollte ich ja ein bischen mit dem ADC spielen und
eingangsspannung auslesen und ausgeben.
Allerdings schaffe ich es nicht einmal, einen enigang zu bestimmen.
Nur mal zur Sicherheit: Ein DRB auf 0 heißt doch "Eingang", heißt doch
"erhält V, leitet ab an GND" ?? Im Internet werden die Begriffe
teilweise scheinbar verwechselt doer ich verstehe etwas nicht.
Na ja, auf jeden Fall habe ich mir einen Simplen testfall gebaut um
einen Eingang zu erstellen.
Ich wollte nun über Spannung oder keine Spannung die LED zum Leuchten
bringen oder halt nicht.
1
#include<avr/io.h>
2
3
void main()
4
{
5
// PC0 als Ausgang und einschalten
6
DDRC=0x01;
7
PORTC=0x01;
8
9
// Alle PB als Eingang und PB0 mit Pullup
10
DDRB=0x00;
11
PORTB=0x01;
12
while(1)
13
{
14
PORTC = PINB; // Test LED
15
}
16
}
Das Problem an der Sache ist, dass ich PB0 gegen GND halten muss, damit
die LED leuchtet. ?? also ist PB0 ein Ausgang ?
Mit der Bitte um HILFE!
Hi, die LED ist gar nicht so wichtig.
Hier menie Frage in einer etwas anschaulicheren Art:
Wenn ich PB0 und GND in den Mund nehme, dann fileßt strom.
Ich hätte gedacht ich müsste PB0 und VTG nehmen damit Strom fließt ?
nelektro schrieb:> Ich hätte gedacht ich müsste PB0 und VTG nehmen damit Strom fließt ?
Du hast den PullUp eingeschaltet. Der liegt sozusagen parallel zu Deinem
Mund, d.h.für Deinen Mund bleibt kaum was übrig und der Strom fließt
auch durch den PullUp, wenn Du nichts in den Mund nimmst.
nelektro schrieb:> Wenn ich PB0 und GND in den Mund nehme, dann fileßt strom.
Richtig, von Vcc über den PullUp zu Deinem Mund und von da nach GND.
Also ein µc-Port der über das DDR-Register als Ausgang gesetz wurde hat
eine Ausgangstreiberstufe, die entweder GND oder VCC an den
entsprechenden Pin legt. Je nachdem wie Du einen Verbraucher anschließt,
kann also Strom hinein oder herausfließen(VCC-> GND oder GND<-VCC).
Wenn Du einen Pin als Eingang setzt, dann fließt er mal kein Strom,
sondern der Eingang reagiert auf die angelegte Spannung und generiert
daraus ein High oder Low.
Wenn Du einen Eingang mit Pull-Upp betreibst, dann hast Du einen
Widerstand zu VCC,d.h. unbeschaltet hat der Pin ein High.
Wenn Du jetz diesen Pin direkt mit GND verbindest, dann ist der Eingang
LOW.
Also vielen Dank erstmal,
Julian verstehe ich am ehesten :-)
Mit Stromrichtung meinte ich (VCC->GND oder GND<-VCC).
Ich habe aber grundsätzlich wohl Eingang mit VCC->GND und Ausgang mit
GND<-VCC gleichgesetzt.
Das scheint ja doch ziemlich variabel zu sein.
Komisch ist nur, dass ich solche Probleme beim beschalten habe.
Ich werde das heute Abend dann in Ruhe mal ausprobieren, nachstellen und
nachlesen. Ich werde diesbgzl. auch nochmal ins Tutorial schauen, falls
noch eine andere gute Quelle kennt wäre ich dankbar, denn in meinen
Anfängerskripten und Tutorial hab ich dafür keine genaue erklärung
erhalten. ...Vieleicht das Datenblatt... :-)
Falls ich dann noch fragen habe, komme ich gerne auf euch zurück G
Danke
Hallo,
denk Dir in den AVR einen Umschalter. Eine Schalterstellung an GND, eine
an Vcc, den schaltenden Teil an den Pin. Das ist ein Ausgang.
Mit L im PORT-Bit ist der Schalter gegen GND geschaltet, mit H im
PORT-Bit gegen Vcc.
Ein Eingang ist ein hochohmiger Sensor (wie Dein Multimeter als
Beispiel), da sollte möglichst garkein Strom fließen, es wird nur die am
PIN anliegende Spannung gegen GND ausgewertet.
Wen Dein "Multimeter" mehr als Vcc/2 anzeigen würde, liest Du ein H, ist
es weniger liest Du ein L aus PINx.
Daraus folgt auch, daß ein Eingang ohne Beschaltung irgendein Potenzial
gegen GND annehmen kann (wie das Brummen eines offenen
Verstärkereingangs) und Du zufällig L oder H vom PIN lesen würdest.
Der AVR hat intern PullUps (Widerstände zwischen Pin und Vcc, irgendwo
um 30kOhm, nicht sonderlich genau)), die man einschalten kann.
Damit hat der Eingang (der selbst ja sehr hochohmig ist) Vcc über diese
30k anliegen und Du liest immer H.
Verbindest Du jetzt den Eingang durch einen Taster mit GND, fließt Strom
von Vcc über den PullUp und Deinen geschlossenen Taster.
Da der Taster viel niederohmiger ist als der PullUp, ist die Spannung am
PIN nahe 0V (Spannungsteiler). Diese Spannung liest der Eingang als L.
Die Innenschaltungen der Ports sind auch im Datenblatt der AVR zu
finden, da kann man das nochmal nachvollziehen.
Gruß aus Berlin
Michael
Ja vielen Dank für die ausführliche Erklärung.
Ich denke jetzt habe ichs zusammen.
Ausgang: GND<-Bauteil<-ATMEGA<-VCC oder VCC->Bauteil->ATMEGA->GND
je nach PORT-Bit
Eingang: GND<-Bauteil<-ATMEGA<-VCC
je nach PROTBIT ohne oder mit internem Widerstand.
zudem wird hierbei die Spannung gemessen und setz das PIN-bit.
Die Bezeichnung Ausgang und Eingang kapier ich ehrlich gesagt immer noch
nicht, aber ich weiß nun was sie bedeuten.
Ich konnte alles nachstellen und mit ner externen LED testen. Bei
Eingang mit Pullup leuchtete die LED ganz ganz schwach. Ohne Pullup
leuchtete sie gar nicht.
Viele Grüße ans Forum und nach Berlin
nelektro schrieb:> Die Bezeichnung Ausgang und Eingang kapier ich ehrlich gesagt immer noch> nicht, aber ich weiß nun was sie bedeuten.
Ausgang bedeutet, dass er ein Bauteil treiben, also Strom liefern oder
aufnehmen kann. (liefern = Ausgang High; aufnehmen = Ausgang Low).
Eingang bedeutet, dass er "keinen" (bzw nur wenig) Strom liefert oder
aufnimmt, sondern nur hochohmig "horcht".
Der Pullup hat damit nichts zu tun. Er liefert nur einen stabilen
Zustand.