mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Attiny85 Digital Input Problem


Autor: Tony S. (tooony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: SonicHazard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Holger L. (max5v)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jeden Taster mit einem Widerstand bestücken an einen Pin anschließen und 
den entsprechenden Widerstandswert messen?

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HildeK schrieb:
> Dann kann er gleich diesem Vorschlag folgen:

Sicherlich. Ist aber nicht das selbe.

Autor: Tony S. (tooony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

const long senderId = 55412;
const int rxPin = 6;
const int pinReset = 5;
const int pinButtonOK = 4;
const int pinButtonC1 = 3;
const int pinButtonC2 = 2;
const int pinButtonC3 = 1;
long sendData = 0;
const int pinLED = 7;


void setup() {

  mySwitch.enableTransmit(2);
  pinMode(pinReset, INPUT); 
  pinMode(pinButtonOK, INPUT); 
  pinMode(pinButtonC1, INPUT); 
  pinMode(pinButtonC2, INPUT);
  pinMode(pinButtonC3, INPUT);
  pinMode(pinLED, OUTPUT); 
  
}

void loop() {  

  if(digitalRead(pinReset) == HIGH){
    digitalWrite(pinLED, HIGH);
    sendData = senderId * 100;
    sendData = sendData + 0;
    mySwitch.send(sendData, 24);
    digitalWrite(pinLED, LOW);    
  } else if(digitalRead(pinButtonOK) == HIGH){
    digitalWrite(pinLED, HIGH);
    sendData = senderId * 100;
    sendData = sendData + 1;
    mySwitch.send(sendData, 24);
    digitalWrite(pinLED, LOW);     
  } else if(digitalRead(pinButtonC1) == HIGH){
    digitalWrite(pinLED, HIGH);
    sendData = senderId * 100;
    sendData = sendData + 2;
    mySwitch.send(sendData, 24);
    digitalWrite(pinLED, LOW);      
  } else if(digitalRead(pinButtonC2) == HIGH){
    digitalWrite(pinLED, HIGH);
    sendData = senderId * 100;
    sendData = sendData + 3;
    mySwitch.send(sendData, 24);
    digitalWrite(pinLED, LOW);      
  } else if(digitalRead(pinButtonC3) == HIGH){
    digitalWrite(pinLED, HIGH);
    sendData = senderId * 100;
    sendData = sendData + 4;
    mySwitch.send(sendData, 24);
    digitalWrite(pinLED, LOW);    
  }
    
}

: Bearbeitet durch User
Autor: Oliver H. (Firma: OliverHeinrichs.de) (dobson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.