Arduino Mega si "sveglia" senza Interrupt

Buon pomeriggio a tutti,
sto creando un piccolo progettino con arduino mega e il modulo della simcom sim808.
Leggendo il datasheet del sim808, ho visto che ha dei pin che posso sfruttare come interrupt per arduino.
Il mio progetto è alimentato a batteria, quindi ho bisogno di risparmiare più energia possibile, allora ho dissaldato tutti i led del mega e del sim808(acquisterò una board con l’Atmega2560 standalone).
Ho implementato lo sleep-mode (PWR_DWN) per il mega, e sfrutto il pin RI del sim808 per farlo svegliare.
In particolare questo pin rimane normalmente a 2.8V, circa, e non appena ricevo un sms o una chiamata, esso va giù(GND) per circa 50ms.
I primi problemi sono iniziati proprio utilizzando un interrupt di tipo FALLING sul pin 2 del mega, perchè su questo pin (e anche il 3) posso solamente utilizzare interrupt di tipo LOW. (Tutti gli altri interrupt li ho già occupati)

Impostando l’interrupt LOW:

attachInterrupt(digitalPinToInterrupt(2), ISR_IR, LOW);

Il tutto funziona, cioè quando ricevo sms e chiamate il mega si risveglia e fa le sue cose…
Il problema nasce dal fatto che il mega casualmente si sveglia, senza che il pin RI sia andato giù.
Ho pensato allora al fatto che il pin RI del sim808, mi fornire 2.8V e non magari un “1” pieno, e quindi il mega lo scambia a volte per uno “0” (sporco) → non so se mi sono spiegato.

Allora come prima soluzione, giusto per capire, ho provato a “tirare su” i 2.8V con un optoisolatore, come nella foto allegata. E ha funzionato, cioè il mega non si più svegliato inutilmente, ma solamente all’arrivo di sms o chiamate.
La questione è che essendo l’opto formato da led ir e transistor, per il mio progetto assorbono un pochino e quindi vi chiedo:
C’è qualche altro modo per tirare su i 2.8V? magari con un mosfet o con un operazionale?

Basta un transistor NPN ma il circuito è di tipo invertente, cioè quando la base è polarizzata dalla tensione di 2.8V sul nodo tra restistenza di collettore e quest'ultimo ci sarà circa 0V. Quando la tensione di 2.8 scende giù attorno a 0 sul collettore ci sarà circa 5V.

Ti serve un BC547-548, una resistenza di collettore da 47k e una R di base di circa 10k.
La base assorbe circa 200uA quando la tensione è 2.8, scende a valore insignificante quando la V2.8 va V0.2.

bjtn_inv.png

bjtn_inv.png

Ciao francesco_b, leggendo la tua richiesta la prima cosa che mi è venuta in mente di suggerirti è di attivare la resistenza interna di pull-up sul pin 2 dell' Atmega2560.
Non conoscendo però lo stadio di uscita del sim808 ho pensato che ,se questo stadio fosse in push-pull, i livelli non cambierebbero. Se questa ipotesi fosse vera potresti, oltre ad abilitare la resistenza di pull-up, collegare il pin 2 dell'Atmega col sim808 tramite un diodo con l'anodo lato Atmega.
Avresti così un innalzamento del livello di tensione per l'uno logico di circa 0,7v e un uguale innalzamento per lo zero logico che comunque può essere correttamente interpretato fino a 1,5v.
Con o senza diodo avresti una piccola corrente che fluisce da Atmega verso Sim. Dai calcolì fatti però, ipotizzando la resistenza di pull-up di 20KOhm la corrente a riposo sarebbe dell'ordine di 0,1mA (col diodo anche meno).

Innanzitutto grazie per le riposte.

Maurotec:
Basta un transistor NPN ma il circuito è di tipo invertente, cioè quando la base è polarizzata dalla tensione di 2.8V sul nodo tra restistenza di collettore e quest'ultimo ci sarà circa 0V. Quando la tensione di 2.8 scende giù attorno a 0 sul collettore ci sarà circa 5V.

Ti serve un BC547-548, una resistenza di collettore da 47k e una R di base di circa 10k.
La base assorbe circa 200uA quando la tensione è 2.8, scende a valore insignificante quando la V2.8 va V0.2.

Invecedi utilizzare un transistor, posso creare lo stesso circuito utilizzando un mosfet con logic level?
tipo il DMG6968?
Per sistemare la questione della logica invertita, potrei collegare l'uscita di quel circuito lì ad un inverter fatto con dei CMOS?
Sapete qualche coppia di mosfet che sono complementari? Perchè sto cercando di simulare il circuito con ltspice ma non trovo i mosfet che hanno un complementare.

Diego67:
Ciao francesco_b, leggendo la tua richiesta la prima cosa che mi è venuta in mente di suggerirti è di attivare la resistenza interna di pull-up sul pin 2 dell' Atmega2560.
Non conoscendo però lo stadio di uscita del sim808 ho pensato che ,se questo stadio fosse in push-pull, i livelli non cambierebbero. Se questa ipotesi fosse vera potresti, oltre ad abilitare la resistenza di pull-up, collegare il pin 2 dell'Atmega col sim808 tramite un diodo con l'anodo lato Atmega.
Avresti così un innalzamento del livello di tensione per l'uno logico di circa 0,7v e un uguale innalzamento per lo zero logico che comunque può essere correttamente interpretato fino a 1,5v.
Con o senza diodo avresti una piccola corrente che fluisce da Atmega verso Sim. Dai calcolì fatti però, ipotizzando la resistenza di pull-up di 20KOhm la corrente a riposo sarebbe dell'ordine di 0,1mA (col diodo anche meno).

Prima di aprire il post, avevo provato ad attivare la resistenza di pullup (senza collegare il diodo però) e non risolvevo il problema. Proverò col diodo come mi hai proposto.

Ciao Francesco,
ho avutro in passato problemi con l'interrupt che gestisce mio anemometro, in pratica io utlizzavo la resistenza pull-up interna di arduino ma, in questo modo, mi captava delle interferenze elettromaginetiche. metterno una resistenza di pull-up da 4.7k esterna ho risolto...
non se possa essere anche il tuo caso...