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
Interner Oszillator oder Quarz? Ne, am besten mach mal ein Foto der Schaltung.
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?
Benutze den internen Oszillator und mit einer Startverzögerung von 64ms. Im Anhang die Schaltung.
@ 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.
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);
}
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
