ATMega32U4 Entprellen

OP #3499835
Lesenswert?

Hallo Gemeinde,
ich komme gerade nicht so recht weiter.
Ich habe mir folgende Schaltung gekauft.
http://www.ebay.de/itm/161194580527?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649
Aus Platzgründen habe ich mich für das kleine Fertige entschieden.
Ich kriege das Teil aber nicht zum Laufen.
PC erkennt es als Arduino Leonardo.
Jetzt ist die Frage mit welchem Programm kann ich den Code brennen?

Hat jemand evtl. den richtigen Code für mich da?
Ich brauche nur eine einfache Entprellung.
Wenn Taster gedrückt soll auch ein Ausgang "an" gehen. Der Rest kann 
Ignoriert werden.

Vielen Dank

-Daniel
OP #3500291
Lesenswert?

Hallo und Guten Morgen, den Arduino IDE 1.0.5 r2 habe ich jetzt 
Installiert.
Worin bestehen die Vor- bzw. Nachteile von Arduino und Atmel Bootloader?

Ich habe mich mal etwas Schlau gelesen. Im Forum stehen mehrere 
Varianten zum entprellen.
http://www.mikrocontroller.net/articles/Entprellung#Softwareentprellung
Die Frage ist nur welche für mein Vorhaben am Sinnvollsten ist.

Gruß Daniel
Moderator (Firma: Titel) Persönliche Seite #3500319
Lesenswert?

Daniel Q. schrieb:
> Hat jemand evtl. den richtigen Code für mich da?
Hausaufgaben müssen selber gemacht werden. Sonst lernt man nichts...
> Ich brauche nur eine einfache Entprellung.
> Wenn Taster gedrückt soll auch ein Ausgang "an" gehen.
Wozu soll bei dieser simplen Aufgabe der Taster entprellt werden?
Lies einfach den Taster-Pin ein und gib ihn auf dem LED-Pin wieder aus.

Daniel Q. schrieb:
> Die Frage ist nur welche für mein Vorhaben am Sinnvollsten ist.
Ich würde das an deiner Stelle einfach mal ausprobieren! Das Gute 
daran ist: Man lernt dabei.

> Die Frage ist nur welche für mein Vorhaben am Sinnvollsten ist.
Woher soll irgendwer wissen, was dein "Vorhaben" ist?
Gast #3500334
Lesenswert?

Servus Daniel,

ich denke mir die ganze Zeit: "Jung wat hast du vor?". Wir reden doch 
hier vom entprellen. Also allgemein funktioniert das so:

1. Timer initialisieren
2. Pin intialisieren und auf Event warten
3. Bei Auftreten des gewünschten Events, Timer starten
4. Bei Ablauf des Timers schauen ob der Pin immer noch dem gewünschten 
Zustand entspricht. Je nach Zustand kannst du dann ja darauf reagieren.


Beste Grüße
public
Gast #3500395
Lesenswert?

Hallo und vielen Dank für die Anteorten.
Ich habe hier eine MosFet Motor Schaltung und einen stark Prellenden 
Taster.
Die MosFet Schaltung hat ein MosFet als Bremse verbaut. Drückt man den 
Taster dreht sich der Motor. Lässt man den Taster los, bremst das zweite 
Fet den Motor.
Und mit dem Prellenden Taster ist das ein Problem. Da habe ich mir 
gedacht yC dazwischen, Entprellung rein und fertig.

Irgendwann soll das mal erweitert werden, bzw. Ausgebaut. Taster kann 
auch leider nicht getauscht werden.

Gruss Daniel
#3500500
Lesenswert?

Peter Dannegger schrieb:
> Dietrich L. schrieb:
>> Da geht aber auch ein RC-Glied
>
> Ja klar, bei 32kB Flash machen 30 gesparte Bytes ja auch enorm viel aus.
> Da lohnt sich das Layouten und Löten zusätzlicher Komponenten so
> richtig.

Ich kann dir da nicht einmal widersprechen, denn €6.50 sind ein 
Argument, gegen das man nur schwer ankommt. Da spielt es dann auch keine 
Rolle mehr, dass ein 32U4 für diese Aufgabe Perlen vor die Säue 
bedeutet.
Die einzige Variable ist es, wie lange es dauert, bis er das Programm 
fertig und in den µC gebrannt hat. Da könnte unter Umständen Layout und 
Löten eines klassischen Entprellers für ein Einzelstück effizienter 
sein.

Nur damit wir vom selben reden. Wenn er die 30 Bytes 'einspart', dann 
ist sein Flash-Verbrauch bei 0. Der ganze Arduino fällt weg. Seine 
einzige AUfgabe ist es, einen einzigen Taster zu entprellen :-)
#3500513
Lesenswert?

Peter Dannegger schrieb:
> Dietrich L. schrieb:
>> Da geht aber auch ein RC-Glied
>
> Ja klar, bei 32kB Flash machen 30 gesparte Bytes ja auch enorm viel aus.
> Da lohnt sich das Layouten und Löten zusätzlicher Komponenten so
> richtig.

Darum geht es nicht. Wenn Daniel nur den Taster entprellen will (mehr 
hat er in seiner Beschreibung nicht gewollt), kann es sich den ganzen 
Arduino + Programmierung sparen und braucht auch keinen Brenner.

Wenn er allerdings den µC für andere Dinge sowieso braucht, hast Du 
natürlich recht. Dann würde ich mein RC-Glied auch nicht empfehlen.

Gruß Dietrich
OP #3501620
Lesenswert?

Hallo und vielen Dank für die ganzen Beiträge und hinweise.
Ich weiß das der 32U4 etwas zu "groß" ist. Ich werde bestimmt nicht 
alles brauchen was der kann. Und auch nicht ausnutzen.
Aber klein und Günstig. Das war das ausschlaggebende.
Ich habe das jetzt alles auf meinem Steckbrett so aufgebaut.
Leider Funktioniert es nicht.
Ich habe jetzt so gemacht wie es dort steht.
1
const int buttonPin = 2;    // the number of the pushbutton pin
2
const int ledPin = 13;      // the number of the LED pin[avrasm]

Ich habe den Code Kompiliert und aufgespielt.
Aber leider kein Ergebnis.

Hier ist auch mal der Schaltplan.

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Dev/Arduino/Boards/Pro-Micro-v11-5V_B.pdf
#3501631
Lesenswert?

Daniel Q. schrieb:

> Ich habe jetzt so gemacht wie es dort steht.

Wie es wo steht.
Da wurden immerhin 2 Links gepostet

>
>
1
> const int buttonPin = 2;    // the number of the pushbutton pin
2
> const int ledPin = 13;      // the number of the LED pin[avrasm]
3
>
>
> Ich habe den Code Kompiliert und aufgespielt.

Das kann aber nicht alles sein.
Zeig den ganzen Code!

Und zwar nicht wie er irgendwo auf einer Webseite steht, sonder so wie 
du ihn bei dir compilierst und brennst.

Hast du eigentlich schon einen ersten Funktionstest mit deinem Arduino 
gemacht. Ganz simpel eine LED einschalten, ausschalten?
OP #3501698
Lesenswert?

Karl Heinz schrieb:
> Daniel Q. schrieb:

> Da wurden immerhin 2 Links gepostet
Ich bin nach dem Tutorial gegangen.
1
>> const int buttonPin = 2;    // the number of the pushbutton pin
2
>> const int ledPin = 13;      // the number of the LED pin[avrasm]
3
>>
>> Ich habe den Code Kompiliert und aufgespielt.
>
> Das kann aber nicht alles sein.
> Zeig den ganzen Code!
Das war auch nur als Ausschnitt gedacht.
Habe jetzt gesehen, das ich aus versehen den A3 als Ausgang genommen 
hatte. Welchen wert muss ich da denn jetzt eintragen?

> Und zwar nicht wie er irgendwo auf einer Webseite steht, sonder so wie
> du ihn bei dir compilierst und brennst.
Ich habe das alles eingefügt und dann Kompilieren und hochladen 
gedrückt.
http://arduino.cc/en/Tutorial/Debounce?action=sourceblock&num=1

> Hast du eigentlich schon einen ersten Funktionstest mit deinem Arduino
> gemacht. Ganz simpel eine LED einschalten, ausschalten?
Nein.
OP #3503103
Lesenswert?

Hallo, ich habe mich heute mal etwas genauer mit dem Thema auseinander 
gesetzt.
Mein Code.
1
// set pin numbers:
2
const int buttonPin = 14;    // the number of the pushbutton pin
3
const int ledPin = 15;      // the number of the LED pin
4

5
// Variables will change:
6
int ledState = HIGH;         // the current state of the output pin
7
int buttonState;             // the current reading from the input pin
8
int lastButtonState = LOW;   // the previous reading from the input pin
9

10
// the following variables are long's because the time, measured in miliseconds,
11
// will quickly become a bigger number than can be stored in an int.
12
long lastDebounceTime = 0;  // the last time the output pin was toggled
13
long debounceDelay = 50;    // the debounce time; increase if the output flickers
14

15
void setup() {
16
  pinMode(buttonPin, INPUT);
17
  pinMode(ledPin, OUTPUT);
18

19
  // set initial LED state
20
  digitalWrite(ledPin, ledState);
21
}
22

23
void loop() {
24
  // read the state of the switch into a local variable:
25
  int reading = digitalRead(buttonPin);
26

27
  // check to see if you just pressed the button 
28
  // (i.e. the input went from LOW to HIGH),  and you've waited 
29
  // long enough since the last press to ignore any noise:  
30

31
  // If the switch changed, due to noise or pressing:
32
  if (reading != lastButtonState) {
33
    // reset the debouncing timer
34
    lastDebounceTime = millis();
35
  } 
36
  
37
  if ((millis() - lastDebounceTime) > debounceDelay) {
38
    // whatever the reading is at, it's been there for longer
39
    // than the debounce delay, so take it as the actual current state:
40

41
    // if the button state has changed:
42
    if (reading != buttonState) {
43
      buttonState = reading;
44

45
      // only toggle the LED if the new button state is HIGH
46
      if (buttonState == HIGH) {
47
        ledState = !ledState;
48
      }
49
    }
50
  }
51
  
52
  // set the LED:
53
  digitalWrite(ledPin, ledState);
54

55
  // save the reading.  Next time through the loop,
56
  // it'll be the lastButtonState:
57
  lastButtonState = reading;
58
}
Ich habe es so wie in dem Tut ( 
http://www.arduino.cc/en/Tutorial/Debounce) beschrieben erst mal auf ein 
Steckbrett gesteckt.
Soweit funktioniert alles. Allerdings ist mir aufgefallen das ich die 
LED wie mit einem Schalter schalte. Was muss man ändern damit ich sie 
nur Taste?
Gast #3504097
Lesenswert?

Daniel Q. schrieb:
> Der Ausgang soll
> auch nur so lange "an" sein wie der Taster gedrückt ist.

Dann ist das meiste ueberfluessig, also:
1
void loop() {
2
  // read the state of the switch into a local variable:
3
  int ButtonState = digitalRead(buttonPin);
4
  // set output
5
  digitalWrite(ledPin, ButtonState);
6
}
OP #3510504
Lesenswert?

Daniel Q. schrieb:
1
 void loop() {
2
   // read the state of the switch into a local variable:
3
   int reading = digitalRead(buttonPin);
4
 
5
   // check to see if you just pressed the button
6
   // (i.e. the input went from LOW to HIGH),  and you've waited
7
   // long enough since the last press to ignore any noise:
8
 
9
   // If the switch changed, due to noise or pressing:
10
   if (reading != lastButtonState) {
11
     // reset the debouncing timer
12
     lastDebounceTime = millis();
13
   }
14
 
15
   if ((millis() - lastDebounceTime) > debounceDelay) {
16
     // whatever the reading is at, it's been there for longer
17
     // than the debounce delay, so take it as the actual current state:
18
 
19
     // if the button state has changed:
20
     if (reading != buttonState) {
21
       buttonState = reading;
22
 
23
       // only toggle the LED if the new button state is HIGH
24
       if (buttonState == HIGH) {
25
         ledState = !ledState;
26
       }
27
     }
28
   }
29
 
30
   // set the LED:
31
   digitalWrite(ledPin, ledState);
32
 
33
   // save the reading.  Next time through the loop,
34
   // it'll be the lastButtonState:
35
   lastButtonState = reading;
36
 }
Das kann dann raus oder?
#3510527
Lesenswert?

Daniel Q. schrieb:

> Das kann dann raus oder?

Exakt.

Etwas zu machen SOLANGE eine Taste gedrückt wird, ist leicht. Du liest 
den Tastenzustand ein und bist ... fertig. Je nachdem kann es sein, dass 
man noch eine kleine Entprellung braucht, damit die paar Preller im 
Millisekundenraster nicht dafür sorgen, dass das Licht zb 3 mal kurz im 
Millisekundenbereich flackert (was ein Lichtsensor durchaus feststellen 
könnte), oder dass ein Motor nicht mit einem 3 maligem 'Stotterer' 
anläuft (was er nicht tun wird, denn dazu ist er zu träge). Aber 
abgesehen davon ist die grundlegende Strategie: einfach einlesen.

Schwieriger ist es, etwas beim Niederdrücken einer Taste nur ein 
einziges mal zu machen. Denn jetzt wirkt sich das mögliche Prellen aus. 
Für den µC ist Tastenprellen nicht von "mein Benutzer hat die Taste 3 
mal schnell hintereinander gedrückt" grundsätzlich zu unterscheiden. Nur 
das für den µC das eine in Zeitlupe passiert und das andere in 
Superzeitlupe. Und genau da ist dann auch der Entprellansatz: 'Drückt 
der Benutzer die Taste zu schnell, dann war das kein Benutzer, der an 
der Taste rumgefummelt hat, sondern der Taster hat geprellt'.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren