PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Debounce Problem mit Attiny85



Chrisa
08.04.2018, 16:52
Hallo Leute!
Ich bin neu im C und AVR und gerade spiele ich mit ein Attiny85.

Ich Habe eine Grundlage im C aber nun bin ich noch immer ein Neuling dabei.

Ich möchte euch gerne fragen ob jemand mir helfen könnte eine simple
debounce routine schreiben in C ? ich kann sehen am mein Oszilloskop
das ich ein bouncing Problem habe aber ich kann nicht erstmal die
erste schritte machen.

Was ich probiert habe bis jetzt ist im Eimer, alles was ich gemacht habe
wahr etwas mit _delay_ms_() nun das bringt nichts... :(
Habe auch nach irgend ein debounce routine gesucht für Beginners aber
auch ohne erfolg...

Wielen dank führ jede Hilfe.

021aet04
08.04.2018, 17:10
Willkommen im Forum,
Hast du einen Code den du posten kannst? Aber mit den codetags.
Eigentlich sollte sich das mit delays lösen lassen (ist aber nicht elegant).

MfG Hannes

Chrisa
08.04.2018, 18:25
Ich habe es leider nach 3-4 Tagen spielen gelöscht, aber es wahr so etwas:




#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int counter = 0;

int main(void)

{


DDRB &=~(1<<PINB0);

while(1)
{

if ((PINB & (1<<PINB0)))
{
_delay_ms(30);
if ((PINB & (1<<PINB0)))
{
counter++;
}

}

}
}


Ich wollte etwas wie bei Bascom das Debounce ist.
Leider comme ich von Bascom nach C und daher kenne ich wie es im Bascom ging.

In C habe ich nicht Programmiert zeit die Schule, es ist ~20 Jahren.
Damals habe ich auch nicht mit AVR gespielt. :)

oberallgeier
08.04.2018, 18:51
.. bin neu im C und AVR und gerade spiele ich mit ein Attiny85 .. eine simple debounce routine schreiben in C ..Zwar nicht C, aber da kann man bestimmt ein bisschen was rauslesen. Zusammen mit Deinen Basickenntnissen sollte das doch klappen ! ?

http://rn-wissen.de/wiki/index.php?title=Bascom_Debounce_ISR_in_Assembler

Siro
08.04.2018, 19:35
Hallo Chrisa schau mal hier, vielleicht hilft es Dir weiter:

https://www.roboternetz.de/community/threads/71839-Hilfe-bei-einem-Code-Teil?p=643866#post643866

Siro

Chrisa
08.04.2018, 19:44
Uff Leute!
Wielen dank!

Ihr habt mir viel geholfen.
Ich glaube ich kann schon was rausholen...

Also, ist 20 mS genug zum prüfen ob die Taster noch immer bounct?

Melde mich wenn ich irgendwo Hängen bleib!

Wielen dank!

Chrisa
08.04.2018, 22:20
Leute!
Sache beendet.

Alles funkt und mein Programm fahrt sehr gut, dank euch.

Falls jemand den code braucht hier ist es:




#include <avr/io.h>


int counter = 0; // Irgend ein zähler, musst nicht integriert sein
int PB1_Counter = 0; // Bouncing zähler
int Debounce = 50; // Bouncing zeit


int main(void)

{

DDRB &=~(1<<PINB1) ;

while(1)
{

if ((PINB & (1<<PINB1)))

{
PB1_Counter++;

if (PB1_Counter==Debounce)
{
counter++; // Wenn PINB1 gedrückt ist geht dieses programm.

}

}

else

{
PB1_Counter = 0;
}




Man kann es auch etwas tunen, aber es funkt auch so sehr schon.
Gerade getestet.