ATtiny45 - EEPROM Ansteuerung - PB4 high

#3619705
Lesenswert?

Hallo,

ich habe leider im Netz nichts dazu gefunden.
Ich habe zwei ATtiny45 gekauft und diese mit dem Arduino programmiert.
Soweit so gut.
Wenn ich aber das eeprom.write befehl rein setze (und glaube sogar, 
nichtmal anspreche) dann schaltet PB4 beim einschaltet des uC den 
Ausgang sofort auf HIGH.
Man kann ihn zwar ganz normal benutzen, aber es ist doof wenn der 
Ausgang mir sofort ein Relais anspricht.

Hat ja jemand einen Rat, da ich gerne die eeprom funktion für mein 
Projekt (Dimmer) nutzen möchte.

Grüße
Michael
#3619726
Lesenswert?

Ich hatte leider noch nicht soviel zeit das genau zu untersuchen, aber 
der fehler war weg, als ich den eeprom include und eeprom.read drin 
gelassen habe.
sobald eeprom.write dazu kam, war der fehler da.
Bei dem Arduino selber konnte ich diesen Fehler nicht reproduzieren.
Habe den Code momentan nicht zur hand, ich werde aber mal eine 
abgespeckte variante aufspielen und vllt liegt es an dem zusammenhand 
zwischen eeprom und meinem eigentlich recht simplen code.
#3619727
Lesenswert?

Michael Ru schrieb:
> Ich hatte leider noch nicht soviel zeit das genau zu untersuchen, aber
> der fehler war weg, als ich den eeprom include und eeprom.read drin
> gelassen habe.
> sobald eeprom.write dazu kam, war der fehler da.

Das besagt normalerweise nicht viel.
Diese "Wenn ich diese und jene Funktionalität dazu/weg gebe" Spielchen 
führen im Regelfall zu nichts. Ausnahmen bestätigen die Regel, wenn 
durch die Zusatzfunktionalität technologische Limits, wie zb 
Speichergrößen, überschritten werden. Aber meistens sind diese Spielchen 
einfach nur Sackgassen und haben mit dem eigentlichen Problem wenig zu 
tun, ausser das sie die Symptome eines ganz anderen Fehlers eventuell 
klarer hervortreten lassen.
#3620330
Lesenswert?

So, ich konnte den Fehler beseitigen, weiss aber nicht wieso genau

original code war
1
void dimmLED() {   
2
  ledValuenew = dimmsteps[dimmstep];
3

4
  dimmstep++;
5
      
6
  EEPROM.write(0, dimmstep);
7

8
  analogWrite(led,ledValuenew);
9
 
10
  if(dimmstep >= 7)
11
  {
12
   dimmstep = 0;
13
  }
14
  longpress = 0;
15
      
16
  onlydimm = 1;
17
  previousMillis = currentMillis;
18
  
19
  delay(100); 
20
  return;
21
}
- Wenn die Taste länger als x-sekunden gehalten wird, dann greift die 
Funktion dimmLED()
- Die Dimm-stufen sind in unterschiedlichen Stufen (Array) aufgeteilt 
und werden dann halt über dimmstep ermittelt.
- EEPROM.write macht nichts anderes, als den Wert zwischen 0 und 7 zu 
speichern.

Der Fehler wurde beseitigt, indem ich
1
analogWrite(led,ledValuenew);
über
1
delay(100);
gesetzt habe. Also eigentlich nur die Reihenfolge geändert, deswegen 
kann ich mir nicht erklären wieso aufgrund dessen ein unabhängiger 
Ausgang auf HIGH gesetzt wird, zumal die Funktion beim starten nicht 
ausgeführt wird.

komisch... aber gelöst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren