Forum: Mikrocontroller und Digitale Elektronik allgemeine Frage bzgl Schaltung Atmega8


von Thomas K. (thomas47058)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe eine allgemeine Frage zur Verdrahtung meines Atmega8. Im Anhang 
befindet sich der Schaltplan. Ich bin ein absoluter Newbie auf dem 
Gebiet. Dem entsprechend ist mein Wunsch: ein simpler zweiter Button, 
der ebenfalls die LED (oder auch eine zweite LED) zum Leuchten bringen 
kann. Softwaretechnisch ist das kein Problem, aber hardwaretechnisch 
steh ich aufm Schlauch...

Wie verdrahte ich einen zweiten Schalter genau? Ich bin ratlos. Das 
derzeitige Programm läßt die LED leuchten, wenn INT0/PIND2 auf Masse 
liegt (eben durch drücken des Schalters). Nun muss ich also einen 
zweiten Schalter auf die Platine bringen, sodass der ebenfals an 5 V 
liegt und durch Drücken geerdet wird, sodass INT1/PIND3 0 Volt bekommt, 
also aktiviert wird.

Wie kann ich nun den zweiten Schalter ebenfalls an die 5 V packen, ohne 
dass, wenn ich den zweiten Schalter drücke, auch der erste geerdet wird?

Sorry, wenn mein Vokabular hier und da noch etwas newbiemäßig klingt. 
Jeder fängt mal klein an, gell?

Danke im Voraus.

Thomas

von Michael U. (amiga)


Lesenswert?

Hallo,

und warum machst Du es dann nicht einfach?!?

10k Widerstand von 5V zum neuen Taster, anderes Ende des Tasters an GND,
Verbindung Taster-Widerstadn an INT1/PD3.

Das ist doch wirklich nun nur abmalen. Das "wie" ist doch beim 
vorhandenen Taster nicht zu übersehen...

Gruß aus Berlin
Michael

von Thomas K. (thomas47058)


Lesenswert?

für jemanden, der das tagtäglich macht, ist das sicherlich kein Problem. 
Für jemanden, der das zum 1. Mal macht, schon. Ich nehme nicht an, dass 
du von der ersten Sekunde an mit den Schaltplänen klargekommen bist, 
oder?

Wie auch immer. Hab das gemacht, was du vorgeschlagen hast, und es 
klappt wunderbar. Danke für deine Hilfe.

Jetzt gehts weier. :)

Die 10kOhm sind notwendig weil ich sonst die ganze Schaltung 
kurzschließen würde, ist das richtig? Müssen es denn 10kOhm sein? Oder 
mindestens?

Warum musste ich bei der Programmierung des Atmega8 nicht explizit 
schreiben, dass die Ports lowaktiv sein sollen? Ist lowaktiv Standard?

Warum musste ich die Richtung der Ports nur angeben, wenn es sich um 
Ausgänge handelt (DDRC = 1<<5; für PC5 als Ausgang)? Sind sonst die 
Ports standardmäßig Eingänge? (Sowas wie DDRC = 0b00000000;)

Faszinierendes Thema, die uCs. Werd mich da mal ordentlich 
reinwurschteln. Macht Spaß.

Danke nochmals und Gruß
Thomas

von Martin S. (panik)


Lesenswert?

Standardmaßig sind alle Portpins als Eingang definiert. Sonst würde beim 
Anlegen der Betriebs-Spannung möglicherweise ein Bauteil bzw. der µC 
Schaden nehmen. Dies hängt ja von der Außenbeschaltung ab. Den 10k am 
Taster kannst du auch weglassen, dann muß nur der interne 
Pullup-Widerstand aktiviert werden.

von Gast (Gast)


Lesenswert?

>Müssen es denn 10kOhm sein? Oder mindestens?

Der genaue Wert ist nicht von Belang. Es würde auch mit 5 kOhm oder 20 
kOhm genausogut funktionieren.

Je kleiner der Widerstand ist, desto mehr Strom fließt, solange der 
Taster gedrückt ist. Dieser Strom soll natürlich nicht riesengroß 
werden. Das begrenzt den Wert des Pullup-Widerstands nach unten.

Je größer der Pullup ist, desto weniger Strom fließt zwar, aber desto 
schwächer ist der Pin auch mit VCC verbunden, und hastenichgesehn 
kommt irgendwann doch mal ein durch irgendwas in die Tastenleitung 
induzierter Störpuls durch und wird irrtümlich als Tastendruck gewertet. 
Das begrenzt den Pullup-Wert nach oben.

Aber wie schon gesagt: Die AVRs haben diese Widerstände bereits 
eingebaut (jeder Pin hat seinen eigenen). Man muss die Gewünschten nur 
enablen, indem man im PORT-Register das entsprechende Bit für diesen Pin 
auf "1" setzt (bei DDR-Bit = 0). Siehe Datenblatt, wie immer. Dann 
können die externen Widerstand wegfallen. Der Hauptvorteil dabei liegt 
aber weniger in den gesparten Bauteilkosten, als vielmehr im stark 
vereinfachten Platinenlayout: Von z. B. 10 Tastern 10 Leitungen zu 10 
µC-Pins zu führen - das ist machbar, aber zusätzlich noch 10 Leitungen 
zu 10 Widerständen, deren andere 10 Enden auch noch mit VCC verbunden 
werden wollen - das ist übel).

von Michael U. (amiga)


Lesenswert?

Hallo,

@Thomas P. (thomas47058): nein, ich bin auch nicht von der ersten 
Sekunde an mit Schaltplänen klargekommen, ich wollte Dich damit auch 
nicht ärgern.

Auf dem Schaltplan fehlt übrigens ein wichtiges Detail: die Leitung OUT 
vom LM317 ist die +5V-Leitung und da gehört auch ein entsprechender 
Spannungspfeil ran. Ist zwar nur ein Zeichenfehler in der Schaltung, 
irritiert aber sicher auch, wenn man sich noch nicht so gut auskennt.

Alle +5V-Pfeile sind ja letztlich verbunden und eben diese +5V erzeugt 
der LM317 an seinem OUT-Pin.

Deine anderen Fragen wurde ja teileweise schon beantwortet, hierzu 
vielleicht noch etwas:
>Warum musste ich bei der Programmierung des Atmega8 nicht explizit
>schreiben, dass die Ports lowaktiv sein sollen? Ist lowaktiv Standard?

lowaktiv ist nur eine Vereinbarung desjenigen, der eine Schaltung baut 
oder ein IC entwirft. Es sagt ja nur aus: ich erkläre hiermit den 
Zustand Low zum aktiven Zustand, also bei Low soll etwas passieren, High 
ist der Ruhezustand.

Das kann man natürlich genausogut andersrum definieren, man muß es nur 
wissen und beachten.
Das low-aktive häufiger zu finden ist als high-aktiv, hat auch 
historische Gründe. TTL-ICs konnten nur nach GND merkliche Ströme 
vertragen, etliche andere Logik-ICs und µC konnten auch nur nach Low 
z.B. 20mA vertragen, bei High dagegen nur weniger als 1mA. TTL-ICs 
erkannten offene Eingänge als H-Pegel, lowaktiv war also auch eine 
gewisse Sicherheit, daß eine fehlende Verbindung eines Signals kein 
ungewolltes Ereignis auslöste.

Trifft zum großen Teil heute nicht mehr so zu, aktuelle AVR z.B. können 
sowohl gegen GND als auch gegen +5V 20mA treiben.

Andererseits gibt es die internen PullUp-Widerstände bei den AVR, die 
als Pegel auch wieder High an den offenen Eingang legen und somit ein 
low-aktiv nötig machen.
Die Entwickler des AVR hätten ja auch interne PullDown-Widerstände 
einbauen können, haben sie aber nicht... ;-)

Gruß aus Berlin
Michael

von Thomas K. (thomas47058)


Lesenswert?

^@michael: Vielen Dank für die Erklärung! Das hat wirklich 
weitergeholfen. Ob low oder high, ein Blick ins Datenblatt wird zur 
Routine werden müssen.

In nächster Zeit würde ich gerne eine Temperaturfühler basteln. Also 
einfach: Temperatur über 20 Grad > grüne LED, Temp drunter > rote LED. 
Einen solchen Sensor habe ich auch schon ausfindig gemacht. Allerdings 
ist dort die Rede von 1-Wire-Bus System. Ich weiß, hier gibts schon 
genügend Beiträge zu genau diesem Thema. Habt ihr auf die Schnelle einen 
guten Literatur Tipp, was dieses 1-Wire-Bus System angeht? Oder schlagt 
ihr für den Anfang vor auf dieses System zu verzichten?

Nochmals vielen Dank an euch. Ihr macht 'n klasse Job. :)

von Gast (Gast)


Lesenswert?

1-Wire-Sensor... hmmm... soll jetzt keine Miesmacherei sein, aber ich 
würde mir den für später aufheben. Dieser Bus ist nicht ganz easy. Wenn 
man nicht genau verstanden hat, wie er funktioniert, und man die nötigen 
Timings im µs-Bereich nicht einhält, bringt man da nix zum Laufen.

Nimm doch einfach einen KTY-Temperatursensor. Zusammen mit einem 
Widerstand baust Du einen Spannungsteiler und die Spannungsmessung 
erledigst Du mit dem ADC. So kannst Du Dich mit dem ADC vertraut machen, 
und das ist ja auch nicht verkehrt.

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.