ATtiny2313: PowerDown/Taster_prellt/Programm_verhällt_sich_seltsam Problem

OP #4112528
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Problem mit meiner Schaltung/Programm und finde einfach den 
Fehler nicht ;-(

Eine kleine mit 4,5V batteriebetriebene Schaltung soll bei Tastendruck 
LED hochdimmem, bei erneutem Tastendruck runterdimmen oder nach ca. 
maximal 60s von allein wieder runterdimmen falls keine Taste gedrückt 
wurde. Stromsparend solls auch sein. Anwendung ist eine Beleuchtung für 
ein Plastikmodell.

Jetzt zum Problem: Die Schaltung funktioniert einwandfrei wenn ich den 
Dragon Programmierer dranhängen habe aber spielt verrückt wenn ich sie 
vom Dragon trenne. Und das verstehe ich nicht so ganz... Das Programm 
überspringt nach Tastendruck z.B. manchmal direkt die Abdimmphase oder 
geht sofort nach dem Aufdimmen aus oder noch verrückter: die LED fängt 
an zu blinken obwohl in meinem Code nirgendwo ein Blinken programmiert 
ist...

Ich vermute ein Übersprechen des Tastenprellens auf die SPI 
Schnittstelle oder das evtl. der Interrupt des Aufwachens mehrfach 
ausgeführt wird und was anstellt, was ich nicht ergründen kann.

Vielleicht kann mir jemand Tips geben was an meinem Code verbessert 
werden kann damit ich das evtl. Softwaremäßig in den Griff bekommen 
kann. Ansonsten werde ich gleich mal versuchen das Prellen hardwaremäßig 
zu unterdrücken, vielleicht bringt das ja einen Erfolg. Oder sollten die 
SPI Kanäle zusätzlich hochohmig geerdet werden?

#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/sleep.h>//NEU
#include <avr/interrupt.h>//NEU

int main (void)
{
  DDRB |= (1 << PB2);//auf 1 setzen => als Ausgang
  PORTB &= ~((1 << PB2));//auf 0 setzen => LED aus

  DDRB &= ~((1 << PB1));//als Eingang
  PORTB |= (1 << PB1);//mit Pullup

  TCCR0A = (1 << COM0A1)|(1 << WGM00);//phase correct PWM

  GIMSK |= (1 << PCIE);
  PCMSK |= (1 << PCINT1);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  for(;;)
  {
                //in den Power-Down Modus gehen

    sleep_enable();
    sei();
    sleep_cpu();//ab hier schlafen und aufwachen
    sleep_disable();
    OCR0A  = 0x00;
    TCCR0B = (1 << CS01);//Clock = CLK/8, Starte PWM

          //Langsames Hochfahren
     for(int i=0;i<=40;i+=1)
     {
       OCR0A  = i;
      _delay_ms(25);
    }

    //Beleuchtungsdauer des Modells = i*_delay_ms
    for(int i=0;i<=6000;i+=1)
    {
      if((PINB&(1 << PB1))==0)break;//bei Tastendruck Ende der 
Beleuchtungszeit & langsames Abdimmen
      _delay_ms(10);
    }

    //Langsames Runterfahren
    for(int i=40;i>=0;i-=1)
    {
      OCR0A  = i;
      _delay_ms(25);
    }
    TCCR0B &= ~((1 << CS02)|(1 << CS01)|(1 << CS00));//Timer aus
  }
}

ISR (PCINT_vect)
{
  cli();
}
OP #4112633
Lesenswert?
• ▲
▼
Ok, das Problem ist gelöst.

Die Batterien konnten wohl die PWM Strompulse nicht bieten(waren 17 
weiße LEDs parallel an einem FET) und haben den AVR abgewürgt. Habe 
leider nur ein Multimeter und das sagte alles ok.
Ein Stützkondensator von + nach - und die Schaltung tut. Ich nehme an 
das der Dragon auf der Platine bzw. der PC dahinter genug Kondensatoren 
verbaut hatte und an der SPI ist ja auch Gnd und Vcc bzw. VTG dran. 
Darum ging es vorher.

Viele Grüße,
Lars

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.