mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik frage zu at mega 32


Autor: Stefan Busch (stefan83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (PINA == 0x04)
{  
  PORTB = 0xff;
}
else
{
  PORTB = 0x00;
}

Autor: Stefan Busch (stefan83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ??

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also du willst das:
1x drücken -> an,
nochmal drücken aus?

dann probiere das:
while (1)
{
   if(    ( (PINB & PB2) == PB2 )
       && (  merker      == 0   )  )
   { 
     merker = 1;
     PORTC ^= 0xFF;
   }
   else
   {
     merker = 0;
   }
}

Hier ist aber der Taster noch nicht entprellt....

Autor: Stefan Busch (stefan83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cool das sieht ma ordentlich aus aber was bedeutet der taster is noch 
nicht entprellt?

Autor: Muckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code wird so nicht funktionieren. Weder die Ports, noch die 
merker-Logik stimmen.
Du kannst es z.B. so machen:
while (1)
{
  if (PINA & (1<<PA2)) {
    if (merker == 0) {
      PORTB ^= 0xff;
      merker = 1;
      _delay_ms(100);
    }
  }
  else {
    merker = 0;
  }
}

Autor: Stefan Busch (stefan83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ??

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.