Forum: Mikrocontroller und Digitale Elektronik atmega128: Eingänge spinnen


von Alex (Gast)


Lesenswert?

Hallo,

hatte vor einiger Zeit mal  ein ähnliches Problem geschildert aber ich
kam zu keinem Ergebnis. Hier mal eine genaue Beschreibung. Hoffe jemand
kann helfen.

Also das Problem ist folgendes:

simples Taster Abfrage Programm, wo z.B. eine LED leuchten soll, wenn
ein Taster gedrückt ist.
Das Problem: immer wenn ein Taster gedrückt ist verhält sich der atmega
so als ob man Reset drücken würdest und schaltet sich komplett ab. lässt
man den Schalter los, so läuft alles wieder aber das Programm laeuft von
neu ab.
Was ich bis jetzt gemacht habe:
-> man denkt zuerst an einen falsch definierten interrupt. Aber habe
alles mal für den Port (PIN: PE6  = INT6) in die ISR geschrieben hat
immer noch nicht funktioniert. Habe dann mit cli(); alle Interrupts
ausgeschaltet. Problem blieb unverändert.

-> habe dann ein einfaches  Programm wie dies hier geschrieben (ohne
jegliche Interrupts) zum Taster abfragen:

#include "main.h"

int main (void){

DDRE &= ~(1<<PE6);
while(1){
if ( PINE & (1<<PINE6))
{
Debug("Test1“);
}
else {
Debug("Test2“);
}
}

return 0;
} // main

Problem gleich geblieben!!!

->habe es an Port PE7 probiert. Gleiches problem.

->habe neuen Schalter benutzt und ihn an den nicht Interrupt fähigen
Port PC2 probiert. Immer noch nix!!!

-> habe in das Forum avrfreaks.net geschrieben. Alle denken da an
Interrupts aber irgendwie glaube ich nicht mehr daran...

Naja jetzt weiss ich nicht mehr weiter. Hast jemand vielleicht eine
Idee was ich mal probieren sollte?

Vielen Dank

Alex

von eRookie (Gast)


Lesenswert?

ersetze mal
"if ( PINE & (1<<PINE6))"
durch
"if ((PINE>>PINE6) & 1)"

von eRookie (Gast)


Lesenswert?

dann ist noch die frage wie dein taster schaltet. schaltet er den PIN
auf +5V oder gegen GND? Falls gegen GND dann musst du noch die Pullups
aktivieren mit "PORTE |= (1<<PE6)"

von sous (Gast)


Lesenswert?

...oder verursacht Dein Taster gar einen Kurzschluss der
Betriebsspannung? (Das kann auch im Sekundenbruchteilbereich der Fall
sein, falls Du irgendwie einen Kondensator ungeschickt zum entprellen
geschaltet hast.)

Bitte sende einmal Deine Schaltung!

Gruß, Michael

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

@eRookie: benutze externen Pullup (10kOhm)

@Michael: hier ein Schaltbild meiner Taster.
S1 geht auf PE6 uns S2 auf PE7.

Alex

von Alex (Gast)


Lesenswert?

nochmal @rooki:
habe die If Abfrage geädert...
war ein Versuch wert ;-)

Danke Alex

von eRookie (Gast)


Lesenswert?

der mega128 wird standardmäßig im mega103 kompatibilitätsmodus
verschickt. daran schonmal gedacht? stolpern viele drüber beim mega128.
weis zwar net obs jetzt dein problem auch betrifft, nur mal so ne idee.
evtl. halt fusebits entsprechend setzen

von Alex (Gast)


Lesenswert?

Sehr merkwürdig...
habe gerade mal mit einem 3,3 kOhm Widerstand probiert statt einem
10kOhm ... und alles klappt wunderbar.
Ich dachte 10 kOhm wäre standard?

Grüße Alex

von eRookie (Gast)


Lesenswert?

10k muss auch gehen. überprüf nochmal ob es wirklich 10k waren und nicht
10R oder sonstwas...

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
Noch kein Account? Hier anmelden.