Verwendung des AVR-Reset-Pins als ADC

Ich verwende einen ATTINY13 für eine Spielzeuganwendung. Es blinkt einfach LEDs in bestimmten Mustern. Ich beschloss, eine "Geschwindigkeitsregelung" mit einem Potentiometer hinzuzufügen, aber der einzige Pin, den ich übrig hatte, ist der Reset-Pin.

Schaltplan mit ATTINY13

Ich habe einen Spannungsteiler erstellt und mit 330-Ohm-Widerständen aufgefüllt, und auf einem Steckbrett scheinen die Dinge einwandfrei zu funktionieren.

Nachdem Sie sich ein wenig über die Verwendung des Reset-Pins für ADC informiert haben, scheinen einige Leute darauf hinzuweisen, dass Sie den AVR nicht erneut programmieren können. Ich hatte dieses Problem nicht, aber ich mache auch keine In-System-Programmierung.

Der Code, den ich verwende, um ADC0 auf Pin 1 (PB5) zu aktivieren, lautet wie folgt:

DDRB = 0b00001000;
ADCSRA = 0b11100111;
ADMUX  = 0b00100000;

Meine Frage ist: Warum funktioniert das? Ich würde gerne ein bisschen mehr wissen, bevor ich mit der Leiterplattenherstellung fortfahre. Bisher nur Pech gehabt?

Ich nehme an, weil das Zurücksetzen niemals Masse "sieht", das Mikro im Stromkreis niemals spontan zurückgesetzt wird, aber ich bin mir nicht sicher, wie ich es geschafft habe, den Reset-Pin für ADC zu verwenden, ohne die Flash-Neuprogrammierung zu deaktivieren.

Hinweis: Ich verwende derzeit eine DIP-8-Version des Chips in einem Sockel, den ich zu einem Programmierer verschiebe, um Parameter zu ändern. Für die Produktion werde ich auf eine SOIC-Version umsteigen.

Sonstiges: Der 6-polige Header verbindet sich mit einigen Charlieplexed-LEDs

Sie müssen klarstellen, was Sie mit "aber ich mache auch keine In-System-Programmierung" meinen und wie sich das von "Flash-Neuprogrammierung" unterscheidet ...
Ich programmiere das Mikro (derzeit) von alleine um; nicht in dem Gerät, das der Schaltplan darstellt. Die endgültige Version wird keine ISP-Header haben und nicht In-Circuit programmiert werden.

Antworten (1)

Die Reset-Sperrsicherung tut genau das - deaktiviert die Reset-Funktion des zugehörigen Pins. Wenn Sie diese Sicherung setzen, gibt es keine Möglichkeit, das Gerät zurückzusetzen, außer:

  • Power-Zyklus
  • Ablauf des Watchdog-Timers

Die serielle In-Circuit-Programmierung (auch bekannt als ICSP) beruht meines Erachtens auf dem Zurücksetzen des Geräts über den Reset-Pin, sodass Sie das Gerät nicht mehr neu programmieren können, sobald diese Sicherung mit ICSP eingestellt ist. Es gibt jedoch mehr als eine Möglichkeit, einen AVR neu zu programmieren. Wenn das Gerät serielle oder parallele Hochspannungsprogrammierung (HVSP oder HVPP) unterstützt, ist dies immer eine Option. Oder wenn Sie einen Bootloader auf dem Chip einbauen können (was zum Beispiel mit einem ATtiny85 möglich ist, nicht sicher über den ATtiny13), kann das auch funktionieren.

Davon abgesehen enthält der Datenblattabschnitt 24.3.3 die folgenden Auszüge:

Spezielle Kombinationen von Sicherungsbits sperren das Gerät für die weitere Programmierung und verwandeln es effektiv in ein OTP-Gerät. Die folgenden Kombinationen von Einstellungen/Sicherungsbits verursachen diesen Effekt:

  • 128 kHz interner Oszillator (CKSEL[1..0] = 11), kürzeste Hochlaufzeit (SUT[1..0] = 00), Debugwire aktiviert (DWEN = 0) oder Reset deaktiviert RSTDISBL = 0.
  • 9,6 MHz interner Oszillator (CKSEL[1..0] = 10), kürzeste Hochlaufzeit (SUT[1..0] = 00), Debugwire aktiviert (DWEN = 0) oder Reset deaktiviert RSTDISBL = 0.
  • 4,8 MHz interner Oszillator (CKSEL[1..0] = 01), kürzeste Hochlaufzeit (SUT[1..0] = 00), Debugwire aktiviert (DWEN = 0) oder Reset deaktiviert RSTDISBL = 0.

Wenn Sie nicht beabsichtigen, die Schaltungsprogrammierung zu unterstützen, können Sie sicher einmal programmieren, dann die Reset-Deaktivierungssicherung setzen und die alternative Funktion des Pins verwenden. Sie möchten die Reset-Funktion nicht in der Produktion aktiviert lassen, es sei denn, Sie möchten Ihr Gerät nicht auf willkürliche Weise zurücksetzen. Wenn der Pin für einen bestimmten Zeitraum "low" ist, wird er im Grunde zurückgesetzt, Ende der Geschichte. Laut Datenblatt Tabelle 18-4 beträgt der Bereich möglicher Schwellenwerte für die externe Rücksetzung auf Auslösung 0,2 * Vcc bis 0,9 * Vcc ... Sie haben vielleicht nur Glück mit Geräten, die näher an 0,2 * Vcc liegen.

Ich nehme an, dass die Sicherung zum Zurücksetzen der Deaktivierung etwas ist, das ich mit avrdude angeben würde. Das mache ich derzeit nicht. Der Beitrag, den ich gelesen habe und der meine Bedenken ausgelöst hat, ist hier: avrfreaks.net/…
Ja, die Reset-Disable-Sicherung ist das potenziell lähmende Ding
Es scheint also nicht notwendig zu sein, die Reset-Funktion (über diese Sicherung) zu deaktivieren, um den Reset-Pin als ADC zu verwenden. Kann ich Zuverlässigkeit von Produktionseinheiten erwarten, ohne diesen Sicherungswechsel vorzunehmen?
@JYelton Ich würde die alternative Funktion nicht verwenden, ohne die Reset-Funktion zu deaktivieren, es sei denn, ich könnte ein starkes Argument vorbringen, dass es entweder keine Rolle spielt, ob sie gelegentlich unerklärlicherweise zurückgesetzt wird, oder dass die Bedingungen, die eine "niedrige" Eingabe erzeugen würden (anscheinend so hoch da 0,9 * Vcc ausreicht, um es gemäß Datenblatttabelle 18-4 auszulösen), kann der Pin konstruktionsbedingt ausgeschlossen werden.
Ihre letzte Bearbeitung hat am meisten geholfen, "lassen Sie die Reset-Funktion nicht in der Produktion aktiviert" sagt ziemlich genau, was mir gefehlt hat. Danke schön.