L'interrupts INT0 non funziona

Buona sera a tutti,

Ho caricato questo sketch

const int buttonPin = 2;     // the number of the pushbutton pin

void setup() {
  Serial.begin(9600);
 
  pinMode(buttonPin, INPUT);

  attachInterrupt(0, wakeUp, CHANGE);
}

void loop() {
  // Nothing here!
}

void wakeUp() {
  Serial.println("ciao");
}

su un Atmega328P SMD Standalone 8MHz e ho collegato tra il PIN 2 e VCC 5V una resistenza da 10K; Quando collego il PIN 2 a massa dovrebbe entrare nella funzione di WakeUp ma in realtà non ci va.

La cosa buffa è che se io sposto tutto sul PIN 3 ma non modifico lo skatch (quindi in teoria lui dovrebbe guardare sempre il 2) funziona perfettamente.

Ora mi sento preso in giro onestamente.
Qualcuno mi sa dare una spiegazione?

Premetto che tutto è nato da un altro progetto (questo skatch è semplificativo) dove in realtà ho due interrupts esterni: un modem che deve risvegliarmi il PIC e un flussostato che deve, acnh'esso, svegliarmi il PIC.

P.S.: ho anche provato a cambiare Atmega ma fa sempre la stessa cosa.

Che scheda selezioni nell'IDE di Arduino?

Questa:

Non mi risulta che il "core" ufficiale supporti "ATmega328P on breadboard" ...
... da dove salta fuori quella board ? Che "core" hai installato per averla ?

Guglielmo

Anche a me quella scheda risulta sconosciuta, comunque tieni conto che usare la funzione attachInterrupt() come la usi tu e' sconsigliato proprio per questioni di compatibilita' sui pin usati per generare interrupt.
Leggere qui

Marco

... infatti, anche perché non puoi mai sapere come il "core" selezionato (... salvo non andarselo a studiare per bene) rimappa i pin ... ::slight_smile:

Guglielmo

Onestamente non ricordo ho scritto su google qualcosa come “Atmega 328P standalone” e mi pare che sia saltato fuori un video tutorial che poi ho seguito alla lettera. Parliamo di due anni fa.

Quindi una delle vie ufficiali per far funzionare questo PIC in Standalone qualse sarebbe? Se mi linkate qualche guida sarebbe il top.

Sulimarco:
Leggere qui

Avevo già letto questo articolo ufficiale ma non ho mai fatto come consigliano loro, ovvero “digitalPinToInterrupts()”.

A questo punto aspetto voi per far funzionare l’MCU in maniera ufficiale in Standalone e poi tornerò sul discorso di seguire quell’articolo.

Dovrebbe essere questa la guida che avevo seguito e in teoria ci sono anche dei video sul tubo...

abinformatica:
Avevo già letto questo articolo ufficiale ma non ho mai fatto come consigliano loro, ovvero "digitalPinToInterrupts()".

... e invece devi fare proprio come indica la guida, NON dire tu quale INT usare, ma dire quale PIN usare e da quello lui ricava, in funzione di come è scritto il "core", quale INT usare.

Guglielmo

Ok capito. Sai darmi qualche dritta sulla via ufficiale per lo Standalone? O meglio per farlo andare ad un clock ridotto ed interno.

Ma guarda che anche una Nano, nonostante abbia un quarzo, può andare con il clock interno alla frequenza che vuoi ... basta studiarsi come impostare i FUSE del ATmega328P ... ce ne sono per programmare da dove arriva il clock e ce ne sono per programmare il divisore interno. In più, da codice, puoi cambiare al volo la divisione del clock semplicemente andando a cambiare dei registri.

Come sempre, prima di fare cose che "vanno fuori dello standard del IDE", tocca studiarsi bene il datasheet e sapere cosa toccare :wink:

Guglielmo

Farò delle ricerche.

Intanto dovrei ricaricare il Bootloader classico selezionando Arduino Uno tra le schede e scrivere quel Bootloader giusto? E poi da li modifico i FUSE?

Per i FUSE, ti consiglio una GUI per avrdude ... da IDE la cosa è più articolata e ogni volta tocca creare una "board" dedicata.

Ad esempio, avrdudess è ottima ... sempre sapendo ciò che si va a toccare ... :wink:

Guglielmo

Buona sera,

me ne sono fatto una bella cultura e (non avendo tuttavia letto 622 pagine di Datasheet) mi sono letto tutto quello che riguarda i FUSE.

Ho scaricato AVRDUDESS e ho anche utilizzato il loro configuratore ma quando poi vado a cliccare su Write mi da questo errore:

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e950f (probably m328p)
avrdude.exe: reading input file "0xE2"
avrdude.exe: writing lfuse (1 bytes):

Writing |  ***failed;  
################################################## | 100% 0.06s

avrdude.exe: 1 bytes of lfuse written
avrdude.exe: verifying lfuse memory against 0xE2:
avrdude.exe: load data lfuse data from input file 0xE2:
avrdude.exe: input file 0xE2 contains 1 bytes
avrdude.exe: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude.exe: verifying ...
avrdude.exe: verification error, first mismatch at byte 0x0000
             0x00 != 0xe2
avrdude.exe: verification error; content mismatch

avrdude.exe done.  Thank you.

Ho già cercato online e dicono che utilizzando l'arduino as ISP come ho fatto io con un Uno non dovrebbe essere il massimo.... Allora ho guardato dei video sul tubo dove usano questo o similari.

Cosa faccio lo compro? Dopo dovrebbe riuscire a comunicare o butto soldi?

Io l'ho comprato (una cosa simile) e mi funziona
In avrdudess devi selezionare "USBasp, http....fischl.de....." na robba così

Ok mi hai dato una speranza!

Mi daresti il link esatto di quello che hai comprato tu?

Grazie

Preso molti anni fa su ebay, dopo 2 anni elenco acquisti viene rimosso.
Dovrebbe essere questo: LINK mio solito spacciatore cinese di robetta x arduino
Ma è dalla cina e quindi ci mette circa 30-45 giorni (dipende dalla direzione del vento ;D )
Al link c'e' anche un convertitore x avere i 6 pin giusti per il connettore da 6 di arduino uno e nano

EDIT: da italia, sempre ebay, un venditore da cui alcuni di noi comprano LINK
Il convertitore: LINK altro venditore, comprai da lui un pò di tempo fa altra roba

Daniele ne compri almeno due così se devi riprogrammare il programmatore cioè aggiornare il firmware lo potrai fare con un altro programmatore

Tralascindo, se non vuoi spendere una certa cifra, i vari programmatori "originali" Atmel/Microchip, posso dirti di aver personalmente provato QUESTO e di non aver riscontrato alcun problema, neanche in ambiente macOS (che è il mio ambiente di lavoro).

Io lo consiglio sempre, è venduto da una seria azienda Italiana, e hanno anche una linea telefonica per il supporto tecnico ... certo, costa di più della cinesata che è stata indicata ... ::slight_smile:

Guglielmo

OK io a dire la verità stavo prendendo questo ma hai fatto bene a darmi questa dritta Guglielmo!