Hallo!
Wir haben ein Problem mit der Ansteuerung unseres Tasters. Eigentlich
wollten wir nur ein einfaches programm zum testen schreiben, was jedoch
nicht funktioniert hat:
#include <avr/io.h>
int main(void)
{
DDRB=0b11111111;
DDRD=0b00000000;
while(1)
{
if (PORTD==0b00000001) // Taster zu
{
PORTB=0b00000111; //LEDs an
}
}
}
Als wir das Programm auf unseren Mirokontroller gebrannte hatten, war
zwischen dem PORTD und hight noch nicht mal eine Spannung. Die LEDs
haben dementsprechend auch nicht geleuchtet,auch wenn man den tTaster
gedrückt hat.
Wäre super, wenn uns das jemand vertsänlich erklären könnte, weil wir
noch wirklich wenig Erfahrungen mit programmieren haben.
Danke schon mal
und LG
amateur schrieb: > Als wir das Programm auf unseren Mirokontroller gebrannte hatten, war > zwischen dem PORTD und hight noch nicht mal eine Spannung. Logisch. WOher soll sie auch kommen? Von einem Pin, der auf Eingang geschaltet ist sicher nicht. Der gibt keine Spannung ab, sondern 'erfühlt' den Spannungspegel, der ihm vorgegeben wird. Deswegen ist das ja auch ein Eingang und kein Ausgang. Lies dir das mal durch. http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports Die Assembler Anweisungen lässt du links liegen. Es geht darum, wie sich Portpins verhalten.
OK Danke! Dann ist das schonmal geklärt. Aber was haben wir im Programm falsch gemacht bzw. was müssen wir machen?
amateur schrieb: > Aber was haben wir im Programm falsch gemacht bzw. was müssen wir machen? Das kommt drauf an, wie und wo ihr den Taster angeschlossen habt und ob ein Pull-up/-down Widerstand aktiviert bzw. vorhanden ist.
Nicht gleich die Führung abgeben wollen, wenn mal jemand einen Hinweis gibt. ;-) Lies nochmal den Abschnitt: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports und vergleiche ihn mit Deinem Programm. Stück für Stück. Wort für Wort. Du findest es bestimmt selbst. Und das "Aha" ist es wert.
amateur schrieb: > OK Danke! > Dann ist das schonmal geklärt. Aber was haben wir im Programm falsch > gemacht bzw. was müssen wir machen? Ihr müsst vor allen Dingen erst mal wissen, wie eure Taster angeschlossen sind. Ein Eingang darf nie ohne eine definierten Spannungspegel bleiben. Entweder der Taster gibt das in beiden Fällen (gedrückt oder nicht gedrückt) vor oder aber er sorgt nur dann, wenn er gedrückt ist für einen definierten Pegel. Dann muss man durch geeignete sonstige Beschaltung dafür sorgen, dass es auch im nicht gedrückten Zustand eine definierte Spannung gibt. Und dazu muzss man wissen, wie die Taster eigentlich genau angeschaltet sind und was passiert, wenn man den Tatser drückt.
"ansteuerung eines Tasters mit AVR Controller in C" ist das Thema, nicht etwa umgekehrt. Stellt sich also die Frage, unter welchen Bedingungen der Taster seinen Zustand ändert. Alles andere geht am Thema vorbei.
Michael schrieb:
"Das kommt drauf an, wie und wo ihr den Taster angeschlossen habt und ob
ein Pull-up/-down Widerstand aktiviert bzw. vorhanden ist."
Wir haben einen Pull-up widerstand aktiviert und den Taster an Masse
angschossen. Solange der Taster nicht gedrückt ist, hat er eine Spannung
von 5 Volt. Eigentlich müsste das so richtig sein, aber wir sind uns
nicht ganz sicher. Deshalb hier nochmal unser Programm:
#include <avr/io.h>
int main(void)
{
DDRB=0b11111111;
PORTD=0b00000001; //Pull up widerstand aktivieren
DDRD=0b00000000;
while(1)
{
PORTD=0b00000100; // Pin2 auf 1 ??
if (PIND==0b00000100)
{
PORTB=0b00000111;
}
}
}
"Das kommt drauf an, wie und wo ihr den Taster angeschlossen habt" Stimmt. Es macht einen Unterschied, ob der Taster im Bad oder in der Küche ist. Ebenfalls ist es maßgeblich, wieviele Anschlüsse des Tasters Verwendung finden.
Gerade frage ich mich ein weiteres mal nach dem Sinn dieses Forums ... Kinder, lasst doch einfach die Finger von Elektronik! Mein Name ist Dieter Sieber, und ich bin ein Ingeneur bei Exxon Mobil in Deutschland.
Da ich jetzt viel Freizeit habe, ist die Sinnfrage zunehmend wichtig geworden. Umsomehr verdient es unser aller Achtung, wenn sich ein "Ingeneur" (sic!" sich outet, dass er seinen Titel nicht mal richtig schreiben kann.
amateur schrieb: > von 5 Volt. Eigentlich müsste das so richtig sein, Nö. Das ist kompletter Quatsch. Werdet euch doch mal darüber einig, an welchem Pin ihr was angeschlossen habt. Und dann leg diese bescheuerte Bitschreibweise ab, wenn du damit nicht klarkommst. Ein Pin wird mit PORTx |= ( 1 << Pinnummer ); auf 1 gesetzt. Ein Pin wird mittels PORTx &= ~( 1 << Pinnummer ); auf 0 gesetzt, Ein Pin wird mittels if( PIN & ( 1 << Pinnummer ) ) darauf hin abgefragt, ob er 1 ist. DDR Register: Für einen Pin muss das Bit mit seiner Pinnummer auf 0 sein, dann ist der Pin Eingang. Ist selbiger Pin auf 1, dann ist der Pin Ausgang. Bei einem Eingangspin bekommt das PORT Register (nicht PIN, PIN ist mit dem physikalischen Pin verknüpft) für diesen Pin eine Sonderrolle: es schaltet den Pullup an diesem Pin ein bzw. aus. ( 1 ist ein) Und das zieht ihr jetzt durch! Das ist doch nicht schwer!
Karl Heinz Buchegger schrieb: > amateur schrieb: > >> von 5 Volt. Eigentlich müsste das so richtig sein, > > Nö. > Das ist kompletter Quatsch. > Stimmt. Der "angesteuerte Taster" dürfte erst ab 2,5 kV leitend werden.
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.