INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Programmierung Attiny 84
22.06.2020, 22:28
Beitrag #1
Programmierung Attiny 84
Guten Abend,

mit einem Kollegen habe ich eine Schaltung entwickelt die als Steuerung eines KFZ-Lauflichtblinker dient. Ein Attiny 84 steuert ein Schieberegister um wahlweise sechs Ausgänge statisch oder dynamisch anzusteuern. Und hier kommt mein Problem: Wenn nicht geblinkt wird bekommt der Attiny keinen Strom und nach ein fahren und Blinken vergisst er oder wechselt er von alleine immer wieder in den statischen Modus. Man fährt also zuhause mit Lauflicht los und kommt nach längerer Fahrt mit Statischem licht an. Kann mir jemand sagen wieso er sich das nicht merkt bzw. was ich dafür machen muss ?

#include <EEPROM.h>


//Pin assignments
#define _3v3_enable 0
#define master_reset 1
#define SH_CP 2
#define ST_CP 3
#define OE 4
#define data 5
#define Blinker 6
#define AUX 7

int _state = 0;
int counter = 0;
unsigned long pulse = 0;
bool flag = 0;

void on() {
shiftOut(data, SH_CP, MSBFIRST, 0xFF);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
}

void shiftOn() {
shiftOut(data, SH_CP, MSBFIRST, 0b000001);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b000011);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b000111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b001111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b011111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b111111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);
}



void off() {
shiftOut(data, SH_CP, MSBFIRST, 0x00);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
}



void ShiftMode() {
while (1) {
if (digitalRead(Blinker) == 1) {
digitalWrite(_3v3_enable, 1); //enable Step Down
shiftOn();
while (digitalRead(Blinker) == 1);
if (digitalRead(AUX) == 1) {
_state++;
}
counter++;
}
else {
digitalWrite(_3v3_enable, 0); //disable Step Down
off();
delay(100);
}

if (counter == 30) {
if(_state >= 12 && _state <= 17){
EEPROM.write(0, 1);
}

}
if (counter == 33) {
EEPROM.write(0, 0);
}
}
}


void NormalMode() {
while (1) {
if (digitalRead(Blinker) == 1) {
digitalWrite(_3v3_enable, 1); //enable Step Down
on();
while (digitalRead(Blinker) == 1);
if (digitalRead(AUX) == 1) {
_state++;
}
counter++;
}
else {
digitalWrite(_3v3_enable, 0); //disable Step Down
off();
delay(100);
}

if (counter == 30) {
if(_state >= 12 && _state <= 17){
EEPROM.write(0, 0);
}

}
if (counter == 33) {
EEPROM.write(0, 1);
}

}
}


















void setup() {
//EEPROM.write(0, 0);
pinMode(_3v3_enable, OUTPUT);
pinMode(master_reset, OUTPUT);
pinMode(SH_CP, OUTPUT);
pinMode(ST_CP, OUTPUT);
pinMode(OE, OUTPUT);
pinMode(data, OUTPUT);

pinMode(Blinker, INPUT);
pinMode(AUX, INPUT_PULLUP);


digitalWrite(_3v3_enable, 0); //disable Step Down
digitalWrite(master_reset, 1); //no reset
digitalWrite(OE, 0); //enable output
digitalWrite(ST_CP, 0);
flag = EEPROM.read(0);


}






void loop() {
if (EEPROM.read(0) >= 1) {
NormalMode();
}

if (EEPROM.read(0) == 0) {
ShiftMode();
}
}


Umgeschaltet wird durch eine Kombination aus Stand und Blinklicht also aktuell Standlicht an - 15 mal Blinken - Standlicht aus - 15 mal Blinken
Das ganze ist so kompliziert um nicht im Fahrbetrieb zufällig ausgelöst zu werden.

Wir wissen aktuell nicht mehr weiter und mein Kollege ist sich sicher das es nicht an der Hardware liegt.

Wäre wirklich toll wenn jemand was wüsste.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2020, 22:38
Beitrag #2
RE: Programmierung Attiny 84
Dein Sketch ist fast nicht zu lesen. In einem Mobilgerät überhaupt nicht.
Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche # oben im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken, oder [ code] davor und [ /code] dahinter ohne die Leerzeichen.


Damit wird dieser für alle besser lesbar.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2020, 09:11
Beitrag #3
RE: Programmierung Attiny 84
@TO: Außerdem entferne bitte die unnötigen Leerzeilen und formatiere den Code ordentlich (<Strg>+T in der IDE hilft Dir dabei).


Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2020, 11:31
Beitrag #4
RE: Programmierung Attiny 84
#include <EEPROM.h>

//Pin assignments
#define _3v3_enable 0
#define master_reset 1
#define SH_CP 2
#define ST_CP 3
#define OE 4
#define data 5
#define Blinker 6
#define AUX 7

int _state = 0;
int counter = 0;
unsigned long pulse = 0;
bool flag = 0;

void on() {
shiftOut(data, SH_CP, MSBFIRST, 0xFF);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
}

void shiftOn() {
shiftOut(data, SH_CP, MSBFIRST, 0b000001);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b000011);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b000111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b001111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b011111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b111111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);
}

void off() {
shiftOut(data, SH_CP, MSBFIRST, 0x00);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
}

void ShiftMode() {
while (1) {
if (digitalRead(Blinker) == 1) {
digitalWrite(_3v3_enable, 1); //enable Step Down
shiftOn();
while (digitalRead(Blinker) == 1);
if (digitalRead(AUX) == 1) {
_state++;
}
counter++;
}
else {
digitalWrite(_3v3_enable, 0); //disable Step Down
off();
delay(100);
}

if (counter == 30) {
if(_state >= 12 && _state <= 17){
EEPROM.write(0, 1);
}

}
if (counter == 33) {
EEPROM.write(0, 0);
}
}
}

void NormalMode() {
while (1) {
if (digitalRead(Blinker) == 1) {
digitalWrite(_3v3_enable, 1); //enable Step Down
on();
while (digitalRead(Blinker) == 1);
if (digitalRead(AUX) == 1) {
_state++;
}
counter++;
}
else {
digitalWrite(_3v3_enable, 0); //disable Step Down
off();
delay(100);
}

if (counter == 30) {
if(_state >= 12 && _state <= 17){
EEPROM.write(0, 0);
}

}
if (counter == 33) {
EEPROM.write(0, 1);
}

}
}

void setup() {
//EEPROM.write(0, 0);
pinMode(_3v3_enable, OUTPUT);
pinMode(master_reset, OUTPUT);
pinMode(SH_CP, OUTPUT);
pinMode(ST_CP, OUTPUT);
pinMode(OE, OUTPUT);
pinMode(data, OUTPUT);

pinMode(Blinker, INPUT);
pinMode(AUX, INPUT_PULLUP);


digitalWrite(_3v3_enable, 0); //disable Step Down
digitalWrite(master_reset, 1); //no reset
digitalWrite(OE, 0); //enable output
digitalWrite(ST_CP, 0);
flag = EEPROM.read(0);


}

void loop() {
if (EEPROM.read(0) >= 1) {
NormalMode();
}

if (EEPROM.read(0) == 0) {
ShiftMode();
}
}

so etwas besser ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2020, 11:34 (Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2020 11:38 von hotsystems.)
Beitrag #5
RE: Programmierung Attiny 84
Was bitte soll da besser sein ?

Siehst du dir das nicht selbst vorher mal an ?

Oder du liest dir das hier genau durch.

Und bitte nicht immer einen neuen Post öffnen, das geht auch mit dem schon vorhandenen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2020, 11:42
Beitrag #6
RE: Programmierung Attiny 84
Naja zumindest die Leerzeilen sind weg. Ein kleiner Fortschritt. Wink
Nun fehlen nur noch die Formatierung und die Codetags.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2020, 12:07
Beitrag #7
RE: Programmierung Attiny 84
(23.06.2020 11:34)hotsystems schrieb:  Was bitte soll da besser sein ?

Siehst du dir das nicht selbst vorher mal an ?

Oder du liest dir das hier genau durch.

Und bitte nicht immer einen neuen Post öffnen, das geht auch mit dem schon vorhandenen.

Ja das war hilfreich danke !


Code:
#include <EEPROM.h>

//Pin assignments
#define _3v3_enable 0
#define master_reset 1
#define SH_CP 2
#define ST_CP 3
#define OE 4
#define data 5
#define Blinker 6
#define AUX 7

int _state = 0;
int counter = 0;
unsigned long pulse = 0;
bool flag = 0;

void on() {
shiftOut(data, SH_CP, MSBFIRST, 0xFF);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
}

void shiftOn() {
shiftOut(data, SH_CP, MSBFIRST, 0b000001);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b000011);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b000111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b001111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b011111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);

shiftOut(data, SH_CP, MSBFIRST, 0b111111);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
delay(30);
}

void off() {
shiftOut(data, SH_CP, MSBFIRST, 0x00);
digitalWrite(ST_CP, 0);
digitalWrite(ST_CP, 1);
digitalWrite(ST_CP, 0);
}

void ShiftMode() {
while (1) {
if (digitalRead(Blinker) == 1) {
digitalWrite(_3v3_enable, 1); //enable Step Down
shiftOn();
while (digitalRead(Blinker) == 1);
if (digitalRead(AUX) == 1) {
_state++;
}
counter++;
}
else {
digitalWrite(_3v3_enable, 0); //disable Step Down
off();
delay(100);
}

if (counter == 30) {
if(_state >= 12 && _state <= 17){
EEPROM.write(0, 1);
}

}
if (counter == 33) {
EEPROM.write(0, 0);
}
}
}

void NormalMode() {
while (1) {
if (digitalRead(Blinker) == 1) {
digitalWrite(_3v3_enable, 1); //enable Step Down
on();
while (digitalRead(Blinker) == 1);
if (digitalRead(AUX) == 1) {
_state++;
}
counter++;
}
else {
digitalWrite(_3v3_enable, 0); //disable Step Down
off();
delay(100);
}

if (counter == 30) {
if(_state >= 12 && _state <= 17){
EEPROM.write(0, 0);
}

}
if (counter == 33) {
EEPROM.write(0, 1);
}

}
}

void setup() {
//EEPROM.write(0, 0);
pinMode(_3v3_enable, OUTPUT);
pinMode(master_reset, OUTPUT);
pinMode(SH_CP, OUTPUT);
pinMode(ST_CP, OUTPUT);
pinMode(OE, OUTPUT);
pinMode(data, OUTPUT);

pinMode(Blinker, INPUT);
pinMode(AUX, INPUT_PULLUP);


digitalWrite(_3v3_enable, 0); //disable Step Down
digitalWrite(master_reset, 1); //no reset
digitalWrite(OE, 0); //enable output
digitalWrite(ST_CP, 0);
flag = EEPROM.read(0);


}

void loop() {
if (EEPROM.read(0) >= 1) {
NormalMode();
}

if (EEPROM.read(0) == 0) {
ShiftMode();
}
}


ich glaube so langsam habe ich es
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2020, 12:37 (Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2020 12:38 von hotsystems.)
Beitrag #8
RE: Programmierung Attiny 84
Und warum schon wieder einen neuen Post?
Das ist jetzt schön unübersichtlich, danke.

Ehrlich liest du auch mal, was wir dir schreiben ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  [gelöst; Reihenfolgeproblem bei der Programmierung]Position falsch von Text ManniP 3 248 27.09.2020 14:29
Letzter Beitrag: ManniP
  RGB Controller Hilfe bei der Programmierung Jumbo_27 1 280 15.08.2020 17:32
Letzter Beitrag: Tommy56
  8x8x8 LED Würfel Programmierung AK79 11 1.186 17.06.2020 22:52
Letzter Beitrag: AK79
  Mit Arduino Uno Sirene Programmierung mh128828 20 1.904 27.03.2020 22:30
Letzter Beitrag: mh128828
  Programmieren eines ATTiny 2313 Gerdchen03 33 3.038 16.01.2020 20:27
Letzter Beitrag: hotsystems
  Programmierung LarsF 13 1.443 13.01.2020 19:53
Letzter Beitrag: ardu_arne
  Programmierung Touch-Display WF55 3 1.368 25.11.2019 21:17
Letzter Beitrag: Tommy56
  Programmierung Sparkfun Pro Micro Gerdchen03 6 1.189 27.09.2019 14:38
Letzter Beitrag: MicroBahner
  Programmierung einer Uhr keklik10 6 2.345 22.04.2019 22:45
Letzter Beitrag: GuaAck
  Fern-Programmierung über Ethernet passra 14 2.446 09.04.2019 20:01
Letzter Beitrag: amithlon

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste