Hallo, also ich habe mir eine Schaltung erstellt. Bei dieser sind alle PINs des ATMega8 belegt. Hauptsächlich wird I/O geschaltet. An allen PINs ausser an PD2 und PD3 wird mit Masse geschaltet, an PD2 und PD3 wird mit 5V+ geschaltet. An PC2,3,4 und 5 habe ich Transistoren die wiederrum Motoren schalten. An PB2,3,4 und 5 habe ich Taster angeschlossen. Drückt man den Taster an PB2 dreht der Motor an PC2. Drückt man den Taster an PB3 dreht der Motor an PC3. Drückt man den Taster an PB4 dreht der Motor an PC4. Drückt man den Taster an PB5 dreht der Motor an PC5. Die Taster schalten Masse an die jeweiligen PINs. Das klappt ja auch so weit wie es soll. Nun wollte ich es so haben das das ganze erst geht wenn an PD2 5V+ anliegen, also sowas wie "reagiere erst auf Taster wenn 5V+ an PD2 anliegen". Allerdings macht der Chip, sobald 5V+ an PD2 oder PD3 anliegen was er will bzw. sobald ich Strom an PD2 oder PD3 anlege dreht der Motor an PC4 für 3 - 4 sek. danach reagiert der Chip auch auf die Taster nicht mehr. Erst wenn ich die Spannung von PD2 wieder weg nehme reagiert der Chip wieder auf die Taster. Genau das gleiche passiert auch bei PD3. Im Code habe ich lediglich, if ((PIND & 1<<PD2)) { strom = 1; } else { strom = 0; } und dann halt if (strom == 1) { der code für die Taster }. Kann mir da jemand weiter helfen?
Tobias N. schrieb: > Allerdings macht der Chip, sobald 5V+ an PD2 oder PD3 anliegen Wie ist die Aussenbeschaltung dieser Pins? Wenn nicht 5V+ anliegen, ist sichergestellt, dass die Pins Massepotential haben (sprich: hast du einen Pulldown-Widerstand oder etwas vergleichbares?). Ein Eingangs-Pin, an den NICHTS angeschlossen ist, hat nicht automatisch einen 0-Wert. Da musst schon du dafür sorgen.
Tobias N. schrieb: > if ((PIND & 1<<PD2)) sollte doch so sein if (PIND &(1<<PD2)) Ansonst Schaltung und gesamten Code, sonst kann man nur Raten.
Tobias N. schrieb: > An allen PINs ausser > an PD2 und PD3 wird mit Masse geschaltet, an PD2 und PD3 wird mit 5V+ > geschaltet. Hoffentlich mit Pulldown-Widerständen? Ansonsten würde ich alle Taster gegen Masse schalten und die Programmlogik entsprechend anpassen:
1 | if (!(PIND & (1 << PD2)) // Die zusätzlichen Klammern sind unnötig, aber höflicher gegenüber Programmierern, die die Operatoren-Priorität nicht auswendig wissen. |
2 | {
|
3 | // Taster-Code
|
4 | }
|
Karl Heinz Buchegger schrieb: > Tobias N. schrieb: > >> Allerdings macht der Chip, sobald 5V+ an PD2 oder PD3 anliegen > > Wie ist die Aussenbeschaltung dieser Pins? > > Wenn nicht 5V+ anliegen, ist sichergestellt, dass die Pins > Massepotential haben (sprich: hast du einen Pulldown-Widerstand oder > etwas vergleichbares?). > > Ein Eingangs-Pin, an den NICHTS angeschlossen ist, hat nicht automatisch > einen 0-Wert. Da musst schon du dafür sorgen. Naja, ich will die internen nutzen. Ausprobierer schrieb: > Tobias N. schrieb: >> An allen PINs ausser >> an PD2 und PD3 wird mit Masse geschaltet, an PD2 und PD3 wird mit 5V+ >> geschaltet. > > Hoffentlich mit Pulldown-Widerständen? Ansonsten würde ich alle Taster > gegen Masse schalten und die Programmlogik entsprechend anpassen: Also die die mit Masse schalten funktionieren ja 1A. Ja also bei den die mit Masse schalten ist es if (!(.... und bei 5V+ muss das (!) ja weg, oder? Aber wie gesagt, an den beiden Pins macht die Schaltung probleme. Vll. sollte ich noch erwähnen das die 5V+ direkt von einem 7805er rein kommen. Also 12V => 100nf => 7805 => 10nf => 1k widerstand => PD2 / PD3
Hier dann mal der gesamte Code. Wahrscheinlich kann man den noch enorm kürzen aber so blicke ich selber da wenigstens durch :) Ich denke ihr könnt ihn lesen und verstehen.
Tobias N. schrieb: >> Ein Eingangs-Pin, an den NICHTS angeschlossen ist, hat nicht automatisch >> einen 0-Wert. Da musst schon du dafür sorgen. > > Naja, ich will die internen nutzen. Die internen kannst du nicht nutzen, wenn der Ruhepegel deines Eingangspins 0V sein soll. Die internen sind Pull-UP Widerstände. Bei dem was dir vorschwebt brauchst du aber Pull-DOWN Widerstände.
also löte ich die 7805er raus, löte dann transistoren ein die masse schalten und mit dem 12V signal schalte ich dann masse zum ATMega, dann sollte es doch gehen, also dann schalten PD2/3 auch mit Masse. Ähm, könnte sich vll. auch mal jemand meinen Timer ansehen? Also ich hätte den Timer gerne so das der jede ms arbeitet, also so das meine variablen jede ms hochgezählt werden. dann kann ich mit ms arbeiten, derzeit arbeite ich mit sek. und das ist zu schlecht, und delay_ms ist ja noch schlimmer. Ich habe mir schon viel über Timer durchgelesen aber ich kapiere nicht wie / wo man die berechnet und die beispiele die man so findet passen auch irgendwie nicht auf meinen Timer.
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.