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
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.
>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.
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!!
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.
Thomas E. schrieb: > Aber du kannst den Pin > als Analogeingang nutzen. Dann kann er gleich diesem Vorschlag folgen: Karl M. schrieb: > Nun die 5 Taster können alle über einen ADC Eingang verarbeitet werden.
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.
Jeden Taster mit einem Widerstand bestücken an einen Pin anschließen und den entsprechenden Widerstandswert messen?
HildeK schrieb: > Dann kann er gleich diesem Vorschlag folgen: Sicherlich. Ist aber nicht das selbe.
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 | } |
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.