hallo ich bin ein absuluter neuling was win avr betrifft hab vorher nur ein bisschen c und step 7 geschrieben ich habe eine platine mit einem at mega 32 und will eine taster schaltung programieren mit der ich leds ein und ausschalten kann möchte aber mit nur einem taster ein und danch wieder aus schalten können . ich habe vorher ein taster programiert in dem ich 2 taster hatte das war ja kein prob aber mit einem ??????? mein programm hab ich einfach mit if geschrieben also zb if (PINA == 0x04) PORTB = 0xff; funktioniert wunderbar aber halt nur das einschalten das ausschalten bekomm ich nicht hin kann ich irgendwie einen merker creieren oder was ähnliches um meinen zustand zu speichern oder wie mach ich das am besten?
danke erst ma für die antwort welche mir leider nicht weiter hilft da ich eine taster schaltung (beim drücken bekomm ich ne 1 und beim loslassen wieder ne null ;) ) also keine mit schalter programieren möchte die zeilen von mir schreib ich hier noch ma komplett hin also die while schleife : while (1) { if((PINB & 0x04) == 0x04) PORTC = 0xff; weiter komm ich nicht da ich nicht weiss wie ich den zustand speichern kann um ihn danach abfragen zu können also wenn die leds an sind und dann der PINB 0x04 brkommt müssen die leds ausgehen nur wie mach ich das ??
Also du willst das: 1x drücken -> an, nochmal drücken aus? dann probiere das:
1 | while (1) |
2 | {
|
3 | if( ( (PINB & PB2) == PB2 ) |
4 | && ( merker == 0 ) ) |
5 | {
|
6 | merker = 1; |
7 | PORTC ^= 0xFF; |
8 | }
|
9 | else
|
10 | {
|
11 | merker = 0; |
12 | }
|
13 | }
|
Hier ist aber der Taster noch nicht entprellt....
cool das sieht ma ordentlich aus aber was bedeutet der taster is noch nicht entprellt?
Wenn der Taster gedrückt wird gibt er mehrere sehr schnell hintereinander folgende impulse ab. Wegen mechanischen Schwingungen und Funken am Kontakt. Das bedeutet, du drückst einmal den Taster dein Programm bekommt aber die Information, dass der Tasta etwa 5 mal sehr schnell hintereinander gedrückt wurde. Das lässt sich glaube ich mit einem Kondensator lösen oder in deinem Fall einfacher mit einer Zeiterzögerung, sobald ein Tastendruck angekommen ist. #include <util/delay.h> while (1) { if( ( (PINB & PB2) == PB2 ) && ( merker == 0 ) ) { merker = 1; PORTC ^= 0xFF; _delay_ms(100); } else { merker = 0; } } Versuche es so, wenn nun ein Tastendruck gekommen ist wartet er 0,1 sek. bis das Programm weiter läuft.
Der Code wird so nicht funktionieren. Weder die Ports, noch die merker-Logik stimmen. Du kannst es z.B. so machen:
1 | while (1) |
2 | {
|
3 | if (PINA & (1<<PA2)) { |
4 | if (merker == 0) { |
5 | PORTB ^= 0xff; |
6 | merker = 1; |
7 | _delay_ms(100); |
8 | }
|
9 | }
|
10 | else { |
11 | merker = 0; |
12 | }
|
13 | }
|
ah so naja ich denke aber ma das die kondesatoren auf der platine vorhanden sind da ich sie in der technicker schule gelötet habe (nach vorgegebenen plänen) bin ich mir allerdings nicht sicher da ich keinen schaltplan sondern nur ne löt anweisung dazu besitze werds ja dann merken gibt es eigendlich ein zu empfehlendes tutorial oder ähnliches wie beim c wo man einfache programme schreiben kann und dann ausprobieren kann ??
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.