Attiny85 Digital Input Problem

OP #4662493
Hallo in die Runde,

für ein Projekt verwende ich den Attiny85. Einen I/O verwende ich zum 
Ansteuern eines 433 MHz Sender. Weiterhin sollen 5 Taster nutzbar sein. 
Aus diesem Grund ist meine Frage, ob man den Reset-Pin softwareseitig 
(Pin 1 des Attiny85) als digitalen Eingang nutzen kann.

Den Quellcode schreibe ich mit der Arduino IDE und übertrage die 
Software via Arduino als Programmer auf den Attiny85.

Danke für eure Hilfe!

Gruß,
Tony
Gast #4662501
Nun die 5 Taster können alle über einen ADC Eingang verarbeitet werden.

Frage Dich mal für was der #Reset da ist und was ist, wenn man #Reset 
abschaltet.

Steht natürlich alles im Datenblatt.
Gast #4662517
>Aus diesem Grund ist meine Frage, ob man den Reset-Pin softwareseitig
>(Pin 1 des Attiny85) als digitalen Eingang nutzen kann.

Kann man, aber dann kann nicht mehr per ISP programmiert werden.
Dann geht nur noch HighVoltage Programming.
Gast #4662518
Nach dem Programmieren der entsprechenden Fuse kann man den Reset-Pin 
anderweitig nutzen. Man verliert aber den Zugriff über die 
ISP-Schnittstelle.
Also die Fuse nur schreiben, wenn man auch einen HV-Programmer (z.B. 
STK500)zur Verfügung hat!!
#4662537
Tony S. schrieb:
> Aus diesem Grund ist meine Frage, ob man den Reset-Pin softwareseitig
> (Pin 1 des Attiny85) als digitalen Eingang nutzen kann

Das Problem wurde ja schon hinreichend genannt. Aber du kannst den Pin 
als Analogeingang nutzen. Wenn du mit dem Taster die Spannung am Reset 
um z.B. 10% absenkst, wird kein Reset ausgelöst und du kannst das mit 
dem ADC messen und auswerten. Die Programmierfähigkeit über ISP bleibt 
dabei erhalten.
#4662692
Natürlich kann man nicht auf zwei Stühlen gleichzeitig sitzen, aber 
probiere es doch mal nacheinander.

Der ISP ist - üblicherweise - offen und wird nur Sonntagnachmittags bei 
schönem Wetter genutzt. Jedenfalls nicht im "Normalbetrieb".

Bei weiteren Problemen: Jump(er) and feel good. Bei Problemen mit den 
Kosten, die gibt es auch zum Nulltarif, wenn Du sie im Layout 
entsprechend, als Lötbrücken, vorsiehst.
OP #4665402
Danke für eure Antworten! Ich hab mir sowas schon fast gedacht. Ich habe 
jetzt zum Attiny84 gewechselt. Hierbei taucht jedoch ein weiteres 
softwareseitiges Problem auf:

Mittels einer LED möchte ich testen, ob der Code in die richtigen Events 
rennt. Beim Anlegen der Spannung ist die LED aus - soweit OK. Drücke ich 
dann eine Taste, geht die LED an, aber nicht wieder aus. Grundlegend 
soll die LED nur beim Button druck (hier nur testweise bei einem Button) 
kurz angehen.

EDIT: Pull Down auf GND ist am digitalen Eingang geschalten.

Hier mein Code:
1
#include <RCSwitch.h>
2
RCSwitch mySwitch = RCSwitch();
3

4
const long senderId = 55412;
5
const int rxPin = 6;
6
const int pinReset = 5;
7
const int pinButtonOK = 4;
8
const int pinButtonC1 = 3;
9
const int pinButtonC2 = 2;
10
const int pinButtonC3 = 1;
11
long sendData = 0;
12
const int pinLED = 7;
13

14

15
void setup() {
16

17
  mySwitch.enableTransmit(2);
18
  pinMode(pinReset, INPUT); 
19
  pinMode(pinButtonOK, INPUT); 
20
  pinMode(pinButtonC1, INPUT); 
21
  pinMode(pinButtonC2, INPUT);
22
  pinMode(pinButtonC3, INPUT);
23
  pinMode(pinLED, OUTPUT); 
24
  
25
}
26

27
void loop() {  
28

29
  if(digitalRead(pinReset) == HIGH){
30
    digitalWrite(pinLED, HIGH);
31
    sendData = senderId * 100;
32
    sendData = sendData + 0;
33
    mySwitch.send(sendData, 24);
34
    digitalWrite(pinLED, LOW);    
35
  } else if(digitalRead(pinButtonOK) == HIGH){
36
    digitalWrite(pinLED, HIGH);
37
    sendData = senderId * 100;
38
    sendData = sendData + 1;
39
    mySwitch.send(sendData, 24);
40
    digitalWrite(pinLED, LOW);     
41
  } else if(digitalRead(pinButtonC1) == HIGH){
42
    digitalWrite(pinLED, HIGH);
43
    sendData = senderId * 100;
44
    sendData = sendData + 2;
45
    mySwitch.send(sendData, 24);
46
    digitalWrite(pinLED, LOW);      
47
  } else if(digitalRead(pinButtonC2) == HIGH){
48
    digitalWrite(pinLED, HIGH);
49
    sendData = senderId * 100;
50
    sendData = sendData + 3;
51
    mySwitch.send(sendData, 24);
52
    digitalWrite(pinLED, LOW);      
53
  } else if(digitalRead(pinButtonC3) == HIGH){
54
    digitalWrite(pinLED, HIGH);
55
    sendData = senderId * 100;
56
    sendData = sendData + 4;
57
    mySwitch.send(sendData, 24);
58
    digitalWrite(pinLED, LOW);    
59
  }
60
    
61
}
#4665425
Du kannst den Reset-Pin mittels Spannungsteiler auf einen Wert von 4,5 
bzw. 5V über einen Taster toggeln und mittels ADC auslesen. Hab ich hier 
irgendwo mal im Forum gelesen. Wenn du über der LOW-Flanke mit dem 
Spannungsteiler bleibst, wird auch kein Reset ausgelöst. Musst halt den 
ADC benutzen. Dann gehts auch ohne Änderung der Reset-Fuse.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.