Go Down

Topic: Attiny85 usare pin reset come output (Read 419 times) previous topic - next topic

max95

Ho provato ora con un attiny25: dopo il cambio fuse il micro funziona ma con anomalie che prima del cambio fuse non presentava. Inoltre da oscilloscopio vedo che il pin Reset ha una tensione di circa 2v a stato logico alto... (probabilmente eroga meno corrente degli altri, perché se lo faccio lavorare a vuoto (senza il circuito collegato a valle) il pin torna sui 4V (e comunque 1V in meno rispetto gli altri pin)

Potrebbe essere qualcosa a livello di sketch?

Code: [Select]
#include <PinChangeInterrupt.h>

const int switch_attivazione = 4;     // PIN 3
const int led    = 0;     // PIN 5
const int uscita = 3;    // PIN 2
const int relay_P   = 2;     // PIN 7
const int relay_N   = 5;     // PIN 1
boolean stato_old    = 1;
boolean stato = 1;
int a = 0;
int tempo = 50;

void setup() {
  attachPCINT(digitalPinToPCINT(switch_attivazione), Test, CHANGE); //considero tutti e due i fronti

  pinMode(switch_attivazione, INPUT_PULLUP);
  pinMode(led, OUTPUT);
  pinMode(uscita, OUTPUT);
  pinMode(relay_N, OUTPUT);
  pinMode(relay_P, OUTPUT);

  digitalWrite(led, HIGH);
  digitalWrite(uscita, LOW);
  digitalWrite(relay_N, LOW);
  digitalWrite(relay_P, LOW);
  digitalWrite(relay_P, HIGH);
  delay(tempo);
  digitalWrite(relay_P, LOW);
  delay(tempo);
  digitalWrite(relay_N, LOW);
  digitalWrite(led, LOW);

}

void loop() {
  if (stato != stato_old) {
    if (stato == 1) {
      digitalWrite(uscita, HIGH);
      digitalWrite(led, HIGH);
      digitalWrite(relay_P, HIGH);
      delay(tempo);
      digitalWrite(relay_P, LOW);
      digitalWrite(uscita, LOW);
      a = 0;
    }
    if (stato == 0) {
      digitalWrite(uscita, HIGH);
      digitalWrite(led, LOW);
      digitalWrite(relay_N, HIGH);
      delay(tempo);
      digitalWrite(relay_N, LOW);
      digitalWrite(uscita, LOW);
      a = 0;

    }
    stato_old = stato;
  }
}


void Test() {
  if (a == 0) {
    stato = !stato;
    a = 1;
  }

}

gpb01

... come controlli i relè? usi delle schedine già fatte o hai fatto tu un circuito driver?

Hai uno schema elettrico del tutto (incluse alimentazioni) ?

Guglielmo
Search is Your friend ... or I am Your enemy !

max95

#17
Aug 21, 2019, 11:22 am Last Edit: Aug 21, 2019, 11:23 am by max95
... come controlli i relè? usi delle schedine già fatte o hai fatto tu un circuito driver?

Hai uno schema elettrico del tutto (incluse alimentazioni) ?

Guglielmo
con classico bit npn e l'alimentazione è il classico 7805 filtrato. Credo che non dipenda dal circuito poiché ora sto programmando con solo il micro posizionato su breadboard e aggiungo il carico in un secondo momento. Ho notato un'altra cosa su un attiny85 programmato in precedenza: che una volta cambiati i fuses l'interrupt change si comporta come un rising e che PB5  non viene attivata mai... il resto dello sketch segue l'algoritmo scritto.

Come già detto, se cambio lo sketch cambiando pin ed eliminando PB5 gira tutto perfettamente

gpb01

#18
Aug 21, 2019, 11:59 am Last Edit: Aug 21, 2019, 12:05 pm by gpb01
... Inoltre da oscilloscopio vedo che il pin Reset ha una tensione di circa 2v a stato logico alto... (probabilmente eroga meno corrente degli altri, perché se lo faccio lavorare a vuoto (senza il circuito collegato a valle) il pin torna sui 4V (e comunque 1V in meno rispetto gli altri pin)
Questo è chiaramente indicato nel datasheet, paragrafo 1.1.4:

Quote
Reset input. A low level on this pin for longer than the minimum pulse length will generate a reset, even if the clock is not running and provided the reset pin has not been disabled. The minimum pulse length is given in Table 21-4 on page 165. Shorter pulses are not guaranteed to generate a reset.
The reset pin can also be used as a (weak) I/O pin.
... quindi devi aspettarti meno disponibilità di corrente e, probabilmente, come stai rilevando, una tensione più bassa.

Leggi i grafici indicati:

Quote
The RESET pin must tolerate high voltages when entering and operating in programming modes and, as a consequence, has a weak drive strength as compared to regular I/O pins. See Figure 22-23, Figure 22-24, Figure 22-25, and Figure 22-26 (starting on page 184).
Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

... Ho notato un'altra cosa su un attiny85 programmato in precedenza: che una volta cambiati i fuses l'interrupt change si comporta come un rising e che PB5  non viene attivata mai ...
Naturalmente stai cambiando il "pin change interrupt" vero? Perché, PB5, può essere (datasheet 10.3.1):

Quote
RESET: Reset Pin
dW: debugWIRE I/O
ADC0: ADC Input Channel 0
PCINT5: Pin Change Interrupt, Source 5
Guglielmo
Search is Your friend ... or I am Your enemy !

max95

Si, sto sfruttando un altro pin di interrupt grazie alla libreria riportata nello sketch allegato in precedenza.

Alla fine il sistema suggerito funziona, ma purtroppo essendo il pin 1 (PB5) meno performante in termini di tensione e corrente nella gestione di output ho optato per ridisegnare il pcb e sfruttare un altro pin... in tal modo funziona tutto alla grande.

Ti ringrazio per il supporto e le dritte fornite.

Go Up