Forum: Mikrocontroller und Digitale Elektronik Atmega8 Outputs "umdrehen"


von Sascha D. (elvis)


Lesenswert?

hallo

wie bereits mehrmals erwähnt bin ich neu in der elektronik materie und 
komme von der programmierer seite. ich habe dank des forums mit erfolg 
meine ersten schtritte im avr tutorial verzeichnen können. (bin bis zum 
LCD teil gekommen, dieser hat mich so fasziniert, das ich mir gleich 
einige programme gebastelt habe). bei den I/O grundlagen habe ich 
gelernt, das auf einem portpin, wenn er an ist immer gnd geschaltet ist, 
und ich diesen mit VCC connecte. soweit so gut.

nun frage ich mich, ob ich das ganze umdrehen kann, und auf einen 
gewissen output port zb PB nun vcc habe und diesen mit GND connecte?

 ihr müsst mir nichti im detail erkähren wie das funktioniert, mir würde 
schon ein suchbegriff weiterhelfen.

entschuldigt für die evtl. blöde frage aber ich freue mich wie immer 
über eine konstruktive antwort.

mfg

sascha

von texter (Gast)


Lesenswert?

Was möchtest du genau?
Die pins am AVR können einen HIGH-Pegel erzeugen und GND, also NULL 
Volt.
Gruß Texter

von Sascha D. (elvis)


Lesenswert?

und wie genau kann ich einen HIGH-Pegel erzeugen?

von Johannes S. (johanness)


Lesenswert?

Kommt auf die verwendete Programmiersprache an...

Lies doch dazu erst mal 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

von Michael Wilhelm (Gast)


Lesenswert?

Beispiel:
Port B Pin 0
DDRB = 1 << PB0   //Pin 0 als Ausgang konfigunrieren
PORTB = PORTB | 1 << PB0  // Pin 0 auf High, alle anderen Pins bleiben 
unverändert
PORTB = PORTB &~ (1 << PB0)// Pin 0 auf low, alle anderen...

MW

von Sascha D. (elvis)


Lesenswert?

Vielen Dank. Ist das wirklich schoh alles? Also im tutorial steht dazu 
folgendes: "weil die Portpins PB0 und PB1 durch die Ausgabe von 0 (low) 
auf Masse (0V) gelegt werden und somit ein Strom durch die gegen Vcc 
(5V) geschalteten LEDs fließen kann. Die 4 anderen LEDs sind aus, da die 
entsprechenden Pins durch die Ausgabe von 1 (high) auf 5V liegen."

also wenn die pins auf 0 sind, dann ist da 5V drauf?? d.h. ich könnte 
die pins in diesem zustand z.B. wieder über ein LEF an GND hängen und 
hätte ein Leuchtendes LED???

Das währe ja phantastisch.

von Jörg B. (manos)


Lesenswert?

Sascha Der anfänger wrote:
> also wenn die pins auf 0 sind, dann ist da 5V drauf?? d.h. ich könnte
> die pins in diesem zustand z.B. wieder über ein LEF an GND hängen und
> hätte ein Leuchtendes LED???
also mit den Zustand eines Pins und dem Connecten verwirrst Du mich ein 
wenig.. Ist der Pin LOW ist er auf 0V.
Dann kommt ein Verbrauchter (in deinem Fall ein LED (hoffentlich mit 
Vorwiderstand)) und dieser hängt dann mit dem anderen Bein an Vcc (5V).

Geschaltet wird das LED dann, wenn der Pin auf LOW geht (und das LED 
leuchtet). Da der AVR sowohl mit LOW wie auch mit HIGH ähnlich viel 
Strom liefern kann (manche anderen Prozessoren können auf LOW mehr als 
auf HIGH - nur so am Rande) kann man das LED auch umdrehen und fest an 
GND verbinden und schaltet es dann über den HIGH-Zustand des Port-Pins.

von Fred (Gast)


Lesenswert?

Hi,

also mich hat die Verschaltung zu Beginn auch sehr verwirrt. Ich 
verwende ein STK500, und bei dem sind die LEDs so verschaltet, dass 
diese leuchten, wenn der entsprechende Ausgang auf Low-Pegel geschaltet 
ist, sie gehen aus, wenn der Ausgang auf High-Pegel liegt.
Wenn man jetzt ein bestimmtes Lichtbild ausgeben will kann man entweder 
vor der Ausgang das entsprechende Byte per Software invertieren oder man 
sucht sich eine andere (eigene) Beschaltung.
Gruß

Fred

von Sascha D. (elvis)


Lesenswert?

"Geschaltet wird das LED dann, wenn der Pin auf LOW geht (und das LED
leuchtet). Da der AVR sowohl mit LOW wie auch mit HIGH ähnlich viel
Strom liefern kann (manche anderen Prozessoren können auf LOW mehr als
auf HIGH - nur so am Rande) kann man das LED auch umdrehen und fest an
GND verbinden und schaltet es dann über den HIGH-Zustand des Port-Pins."

Vielen dank genau so habe ich das auch gemeint b.z.w. mir vorgestellt. 
liegt wohl an meiner ausdrucksweise. ich sollte mir vileicht erst mal 
einen kaffee gönnen :-)

Um etwas mehr ins detail zu gehen: ich hab mir da gestern 3 7segment 
displays zusammengelötet. jeweils a-a-a, b-b-b, c-c-c, d-d-d und so 
weiter miteinander verbunden. nun gebe ich auf diese pins ja jeweils 5V 
und um ein entsprechendes 7seegment diplay anzusteuern muss ich den 
dazugehörigen gnd pin auch mit gnd verbinden. ich hoffe mal dass ich da 
soweit auf dem richtigen weg bin. Also hätte ich so an meinem AVR einen 
Port, der mir die einzelnen segmente annsteuert, der dann 5V ausgeben 
müsste, wenn ein segment leuchten soll. ein weiterer port soll den 
displays sagen, welches das angesteuert werden soll, also müsste der pin 
für das display dass angesteuert werden soll GND ausgeben. ich hoffe 
meine überlegungen stimmen soweit.

Ach ja, die 7segment displays funktionieren ja auch mit LED's, brauch 
ich da auch einen vorwiderstand?

mfg

sascha

von Johannes S. (johanness)


Lesenswert?

Sind es 7-Segment-Anzeigen mit gemeinsamer Anode oder gemeinsamer 
Kathode? Danach richtet es sich, auf welche Seite Du nachher 1 und auf 
welche 0 geben musst. Sonst machst Du es falsch und plötzlich leuchten 
sie alle, obwohl alles dunkel sein sollte ;)

Zur Hardware: Vorwiderstände müssen sein (brauchste dann sieben oder mit 
Punkt acht), außerdem würde ich die drei gemeinsamen Anschlüsse nicht 
direkt schalten sondern per Transistor, zumindest Du dich nicht mit 5mA 
pro Segment begnügen möchtest (guck mal im Datenblatt der Anzeigen beim 
zulässigen Dauer- und Spitzenstrom). Ein ATmega8 liefert nur maximal 
40mA pro Pin.

Zum Transistortreiber siehe auch hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Ausg.C3.A4nge_benutzen.2C_wenn_mehr_Strom_ben.C3.B6tigt_wird
Das Bild entspricht praktisch der Schaltung bei gemeinsamer Kathode, 
statt VCC wird oben aber dein mit "a, b, c, ..." benannter Pin 
drangehängt. Bei gemeinsamer Anode das ganze einfach umdrehen: GND wird 
zu VCC, aus NPN wird PNP.

von Jörg B. (manos)


Lesenswert?

Johannes Slotta wrote:
> Ein ATmega8 liefert nur maximal 40mA pro Pin.
...und max. 100mA pro Port und max. 200mA Gesamt (gleichzeitig).
Sofern Du die Segmente nicht nacheinander ansteuerst solltest du also 
darauf achten, dass z.B. bei einer "8" sieben Segmente an sind die aber 
zusammen nicht mehr als 100mA Strom ziehen dürfen (sofern alle am 
gleichen Port hängen).

von Sascha D. (elvis)


Lesenswert?

vielen dank für deine erklährung, johannes. ich habe mir das über mittag 
eben schnell zusammengesteckt und es scheint zu funktionierrn. 
allerdings habe ich in diesem zustand weder die vorwiderstände noch die 
transistoren dran. für was der transistor ist leuchtet mir auch ein. ich 
habe allerdings das datenblatt der displays nicht zur hand (werde das am 
abend mal checken.

jetzt nur für das verstäntnis: warum braucht es die vorwiderstände?

von Ulrich (Gast)


Lesenswert?

Gegenfrage: Was passiert wenn man in die Steckdose fasst?
Richtisch, man kann draufgehen.... und genau so ist es bei der LED.
Und in beiden fällen war die Spannung zu hoch

von Sascha D. (elvis)


Lesenswert?

ok. vielen dank, das ist nachvolziebar. wenn nun aber die leds ohne den 
vorwiderstand leuchten brauche diesen dann trotzdem, oder könnte es 
sein, dass die leds nach längerer betriebsdauer kaput gehen?

von Marvin M. (marvin)


Lesenswert?

Ja, normale LEDs gehen kaputt, wenn man sie ohne Vorwiderstand an 5V 
betreibt. Durchaus möglich, dass Du durch Deine Versuche die LEDs oder 
den µC schon geschädigt hast.
Der Vorwiderstand ist dazu da, den Strom durch die LED zu begrenzen.

Es wäre definitiv sinnvoll, sich erst genauestens zu informieren und 
dann die Tipps (wie o.g. Vorwiderstände zu benutzen) nicht zu 
ignorieren.

von l00k (Gast)


Lesenswert?


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.