Forum: Mikrocontroller und Digitale Elektronik Probleme mit ATtiny 84V 10PU


von Roy P. (digga)


Lesenswert?

Hallo freunde der µC

ich habe ein Problem mit dem ATTiny84V 10PU.
Und zwar habe ich eine Schaltung gebastelt, die Zentralverriegelung 
meines Fahrzeuges mit einem Funkmodul und eins zwei kompfortfunktionen 
Steuert. Dafür wurde der o.g.µC zum steuern eingesetzt. Gut das programm 
läuft (nicht optimal Programmiert aber läuft[bin noch anfänger in der 
RISC-Prog.]).Und die fkt. gehen auch.
   Nun zu dem Problem. Bei Temperaturen unter 6 Grad kommt es vor, das 
sich der µC aufhängt bzw. er deutlich langsamer läuft( ist ersichtlich 
an einem optischen Signal welches im normalzustand ca. 2sek läauft sich 
aber manchmal dann auch 1-30 sek. verlängert.)

Mit einem Spannungsreset gehts dann wieder, aber das Problem ist dennoch 
net behoben.

Hätte vll. einer von euch eine Ahnung, wo das Problem liegen kann?

P.S. Lt. Datenblatt ist der µC geeignet für temp. von -40..80 °C

Danke im vorraus. Digga
von Horst G. (Gast)


Lesenswert?

Interner Oszillator oder Quarz? Ne, am besten mach mal ein Foto der 
Schaltung.
von Christian W. (cweckmann)


Lesenswert?

Laut DB ist sogar "-55°C to +125°C" zulässig (vgl. Electrical 
Characteristics) und der interne RC-Oszillator sollte, ausgehend von 
8MHz selbst bei 0°C nicht unter 7.8MHz fallen.
Evtl. wäre zusätzlich auch ein Blick in dein Programm interessant. Wie 
wird das ding mit Strom versorgt?


P.S.: Meinst du wirklich daß es klug ist sein Auto von 'nem ohne große 
Erfahrung geschriebenen Programm in einem µC öffnen zu lassen? Was 
benutzt du als Sender und Empfänger?
von Roy P. (digga)


Angehängte Dateien:

Lesenswert?

Benutze den internen Oszillator und mit einer Startverzögerung von 64ms.

Im Anhang die Schaltung.
von Roy P. (digga)


Lesenswert?

@  Christian

Sender bzw. Empfänger ist ein 2-Kanal funkmodul aus einer alten 
Zentralverriegelung. Das Problem warum i den kram gebastelt habe, ist, 
dass es für diese ZV keine funksteuerung bzw. automatische verriegelung 
bei nicht betreten des Fzg. gibt. Also musste i das selber bauen. Die 
vorhergehende VErsion dieser Funktion, war mit analogtechik aufgebaut. 
Alledings benötigte das ca. 100 BE und das wollte i per µC verringern.
von Roy P. (digga)


Lesenswert?

Hier mal das Programm. Bitte nicht schlagen!!! Ist nicht gerade super 
Programmiert. C-Programmieren klappt besser...;-)

************************************************************

#define TUER (PINB & (1 << PINB0))
#define ZUEND (PINB & (1 << PINB1))
#define ZU (PINB & (1 << PINB2))
#define AUF (PINA & (1 << PINA7))


void init(void);
void long_delay(uint16_t ms);
void ABFRAGEN(void);
int BLINK_AUF(void);
void BLINK_ZU(void);
void ZU_ABFRAGEN(void);
int verz(uint8_t zeit);
void long_delay_ohne(uint16_t ms);




void long_delay_AUF(uint16_t ms)
{
    for(; ms>0; ms--)
  {
  if (TUER || !ZUEND || !ZU) break;
   _delay_ms(1);
  }
}
void long_delay_ZU(uint16_t ms)
{
    for(; ms>0; ms--)
  {
  if (!AUF || !ZU) break;
   _delay_ms(1);
  }
}
void long_delay_ohne(uint16_t ms)
{
    for(; ms>0; ms--)
  {
//  if (!TUER || ZUEND || ZU) break;
   _delay_ms(1);
  }
}

int main( void )
{
  init();
//  BLINK_AUF();
  ABFRAGEN();


    return 0;
}

void init(void)
{

  DDRA = 0x09;
  PORTA = 0x00;
  //eingänge

  DDRB &= ~((1 << DDB0) | (1 << DDB1) | (1 << DDB2)); // Port B Pin 0, 
1,2,A7 auf Eingang
  DDRB &= ~(1 << DDA7);
  PORTB |= ((1 << PB0) | (1 << PB1) | (1 << PB2));
  PORTA |= (1 << PA7);


}

void ABFRAGEN(void)
{



  while (1)
  {
    if ((BLINK_AUF() && ZUEND))
    {
      if (verz(28) == 1)
      {

        PORTA |= (1<<PA3);// auf 1 setzen
        long_delay_ohne(750);  // ca. 1 sekunde porta ausgang gesetzt 
lassen ohne resetmöglichkeiten...
        PORTA &= ~(1<<PA3);// auf null setzen
        BLINK_ZU();

      }

    } //break;
    if ((!ZU  && ZUEND))
    {
        PORTA |= (1<<PA3);
        long_delay_ohne(750);
        PORTA &= ~(1<<PA3);
        BLINK_ZU();
    }
  }
}

void BLINK_ZU()
{
uint8_t i;

      for(i=0; i<=3;  i++)
      {
        PORTA |= (1<< PA0);//0x02;// auf 1 setzen
        long_delay_ZU(1000);  // ca. 1 sekunde porta ausgang gesetzt 
lassen ohne resetmöglichkeiten...
        PORTA &= ~(1<<PA0);
        long_delay_ZU(1000);
      if (!AUF || !ZU) break; // weiterblinken bei tuer auf und zündung 
an darf er...nur bei auf nicht...
      }



}

int BLINK_AUF()
{
uint8_t i;
  if ((!AUF && !TUER && ZUEND))
    {
      for(i=0; i<=1;  i++)
      {
        PORTA |= (1<< PA0);//0x02;// auf 1 setzen
        long_delay_AUF(2000);  // ca. 1 sekunde porta ausgang gesetzt 
lassen ohne resetmöglichkeiten...
        PORTA &= ~(1<<PA0);// auf null setzen
      if (!ZU) break; // weiterblinken bei tuer auf und zündung an darf 
er...nur bei zu nicht...
      }
      return (1);

    }
  else
  {
  return (0);
  }

}
/* verzögerung für wartezeit bis geschlossen wird nachdem geöffnet 
wurde.*/
int verz(uint8_t zeit)
{
uint8_t i;
    for(i=0; i<=zeit; i++)
      {
        long_delay_AUF(1000);  // 1 sekunde warten
        if (TUER || !ZUEND || !ZU) break;   // alle drehen org:(!TUER || 
ZUEND || ZU)
        if (i==zeit) return (1);
      }
      return (0);
}
von Ronnie (Snoop) (Gast)


Lesenswert?

zwar schon  alt... aber evtl. sollte man sich mal mit den RST pin 
beschäftigen... :))
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.