Shield Ethernet ed Interrupt

E inizio qui ad assillarvi, con una premessa: ho fatto giorni di ricerca su Google e sul forum, non ho trovato nulla che mi aiutasse, quindi, se per caso la domanda è gia stata pubblicata, chiedo venia, ma con tutta la buona volontà, e con tutte le parole chiavi che mi sono passate per la mia bacata mente, nulla trovai!
Comunque, tornando a noi, vi espongo quello che sarebbe il progettino che ho in mente.
A novembre farò l'esame per diventare radioamatore (sperando di superarlo, non dovrei aver problemi comunque :P), una cosa carina che volevo fare era realizzare un beacon (radiofaro, che trasmette in CW (morse) un segnale automaticamente a loop) da 1W a 14MHz, la parte elettronica non è un problema che voglio discutere qua (anche perchè non è proprio un problema!!).
Il messaggio viene generato da Arduino, avevo gia fatto uno sketch che converte in morse, con velocità regolabile, una stringa. Oltre a trasmettere le solite cose (portante VVV de callsign JN45KN), trasmettesse anche il fondo di radioattività naturale cosmica, e anche quello non è un problema, ogni volta che la sonda GM capta una radiazioni ionizzante, produce un impulso, che amplifico, squadro, e lo uso come interrupt per incrementare un contatore (anche per questo ho gia fatto prove per uno scaler che sto costruendo).
Che centra allora lo Shield Ethernet? Ebbene, per legge un beacon deve poter essere ALMENO spento da remoto (nel mio caso vorrei spegnerlo, accenderlo, fare eventualmente una sorta di diagnostica da remoto), io pensavo di usare lo Shield Ethernet per gestirlo via telnet da un gateway remoto o locale, e qui vengono i problemi...... io non posso restare in ascolto di un pacchetto da un gateway a loop, per il semplice fatto che Arduino sarebbe interdetto, e non mi farebbe la funzione di beacon, mi chiedevo, c'è un modo tramite lo Shield Ethernet, di creare un interrupt ogni qualvolta riceva un pacchetto (che poi verrà stabilito se veramente è un tentativo di accesso via telnet, altrimenti basterebbe anche una richiesta di ping per bloccare il tutto)? Ho cercato sulla pagina dedicata allo shield, trovando nulla, ho pure sfogliato il datasheet del WIZnet W5100, trovando ben poco, Google e la ricerca sul forum non mi hanno aiutato, confido nella vostra bontà d'animo!!!

Grazie in anticipo,
73,
Luca

Premetto che non ho uno shield Ethernet però non credo che il chip che gestisce la scheda sia un microcontrollore programmabile per cui non penso tu possa fargli generare interrupt.

Una domanda: perché dici che se controlli l'arrivo di pacchetti da Arduino non puoi generare il segnale radio? Come generi questo segnale?

73+51 :stuck_out_tongue:

Ciao

non ho visto possibilità di generare input in ricezione... ma non puoi semplicemente inserire un check nel tuo loop()? Arduino è completamente impegnato nell'invio dei pacchetti beacon? La routine di invio è bloccante (es. con dei delay())?

@Leo:
Allora, il segnale in se è generato da un oscillatore al quarzo, Arduino semplicemente deve interrompermi la portante per trasmettere in CW, pensavo di usare un MOS-FET (col gate pilotato da un uscita digitale di Arduino) che mi sollevasse il source di un altro MOS-FET che uso come finale per il trasmettitore (in questo modo, con livello logico 0 non c'è emissione di portante, mentre c'è con livello logico 1).
Il messaggio è convertito in morse da una funzione, che salva il messaggio (in linee e punti) in un altro array (così la conversione viene fatta una sola volta), l'array viene analizzato in posizioni successive e in base al carattere trovato, mi setta il livello logico del pin che uso per pilotare il gate del MOS-FET usato come "interruttore" alto o basso per un certo periodo di tempo (a seconda che sia un punto, una linea, lo spazio tra caratteri o tra parole), ovviamente tutto questo è all'interno di un ciclo iterativo, ecco perchè dicevo che, restando in ascolto, non potevo eseguire la funzione di beacon vera e propria

@Luca:
Ovviamente non userei la funzione delay(), senno farei la fine del cane che si morde la coda e non ne uscirei più!
La tua soluzione l'avevo pensata anche io, alla fine nel ciclo iterativo che uso per la generazione del codice, posso ascoltare ogni volta che inizia il ciclo (considerando poi il timeout del comando telnet, la cosa sarebbe la soluzione migliore apparentemente!), tuttavia prima volevo chiedervi se lo shield creava un interrupt per semplificarmi la cosa (e ridurla al minimo!), tuttavia ogni altro suggerimento è ben accetto, con questo cose ci smanetto da poco tuttavia :wink:

Altra soluzione a cui avevo pensato:
Il messaggio di un beacon DOVREBBE (sempre per legge) essere così strutturato:
30 secondi: messaggio
10 secondi: portante continua
30 secondi: frequenza libera
Ho quindi 30 secondi in cui la frequenza è libera, per adibire Arduino al solo ascolto per un gateway remoto, quindi chiedo a voi: se non vado errando, il timeout quando si cerca di connettersi via telnet è di 60 secondi, se così fosse, sarebbe perfetto, perchè io posso inviare la richiesta quando mi pare, finito il messaggio, Arduino risponde e mi consente di effettuare il login e ogni cosa annessa.
Se invece dico una fregnaccia e il timeout è solo di qualche secondo, allora dovrei fare telnet in quei 30 secondi liberi, quindi dovrei essere munito di una radio ed ascoltare, oppure altra soluzione: mandare uno stream di dati via UDP come ad esempio un countdown, così so quanto manca alla fine del messaggio e automaticamente so quando potrò accedere via telnet!
Attendo molte tirate d'orecchie e insulti :smiley:

Intanto ci tengo a ringraziarvi per l'interesse e le celeri risposte :slight_smile:

73,
Luca

Fammi capire.

Tu hai un array composto da un messaggio testuale che poi trasmetti in morse.
La trasmissione del messaggio avviene per 30 secondi, poi attacchi la portante per 10 secondi ed infine la stacchi per altri 30.

Quindi in teoria potresti delegare ad una funzione integrata in un timer il compito di "alzare"/"abbassare" la portante in base al segnale da trasmettere. Il programma principale può così restare costantemente in ascolto sulla porta ethernet: nel caso arrivi un segnale "lecito", nel qual caso disattivi l'interrupt relativo al trasmettitore finché non ricevi un segnale per riattivarlo o fai quel che devi.

Manco da un giorno qui sul forum, torno e chi mi trovo ? Arma ?
Come mai in passegggiata da queste parti ? :stuck_out_tongue_closed_eyes: