Elettronica e Radiotecnica > Elettronica & Radiotecnica

creazione di un frequenzimetro

<< < (3/7) > >>

IZ2UUF (davj2500):

--- Citazione da: listener - 23 Ottobre 2021, 14:38:25 ---Si userà pure il compilatore gnu, però tu nella paginetta scrivi sempre ad alto livello e ad oggetti, va per forza interpretato prima di mandarlo al processore. E' molto diverso che lavorare con il c della casa madre della microchip che traduce quasi tutte le istruzioni 1:1. Poi certo se usi direttamente il chip di arduino cambiato tutto, ma l'aproccio è molto diverso.

--- Termina citazione ---

Ciao a tutti.

Il compilatore è un programma che legge un file scritto in un linguaggio ad alto livello (ad esempio il C) e lo traduce in una sequenza di istruzioni di codice macchina per il l'architettura di destinazione (es. un PIC, un PC, un ATMega32, ecc.). Fatto ciò una volta, il microprocessore del sistema di destinazione si trova nella memoria la sequenza di sue istruzioni che deve eseguire.
L'interprete, invece, è un programma che funziona sul sistema di destinazione e traduce al momento ogni comando, scritto nel linguaggio ad alto livello, in una serie di azioni da compiere.

I vari PIC, ATMega, STM-32, ecc. sono famiglie di circuiti integrati di varie marche (Microchip Technology, Atmel, ST Microelectronics, ecc), ma sostanzialmente sono "computer su un chip", cioè un singolo integrato che contiene la CPU, la RAM, la flash, le porte di I/O, convertitori A/D, convertitori D/A, timer, watchdog, DMA, ecc. In base al tipo di integrato che si sceglie, si hanno o meno varie funzionalità e prestazioni diverse.
Arduino è una scheda su cui viene montato uno di questi circuiti integrati uniti ad altre circuiterie che ne facilitano l'uso, come ad esempio il regolatore di tensione, dei pin-strip per agevolare la connessione o un convertitore seriale-USB per la programmazione.
Inoltre Arduino completa il quadro fornendo un ambiente di sviluppo molto semplice da utilizzare, corredato di librerie di contorno che consentono anche ai principianti di utilizzare molti dispositivi esterni.
Questi "microcontrollori", compresi quelli saldati sulle schede Arduino, sono tutti "professionali" in quanto nessuna di queste aziende produce microcontrollori "giocattolo". Stessa cosa vale per gli ambienti di sviluppo, quasi sempre basati su compilatori GCC che sono ormai lo standard de-facto anche negli ambienti professionali. Tra parentesi, le possibilità in termini di ottimizzazioni dei microprocessori contenuti nei microcontrollori sono così modeste che un compilatore fa presto a raggiungere il massimo che si possa fare.

Quindi, cosa scegliere tra tutte le schedine che esistono in commercio?
Ovviamente conviene andare su una famiglia che già si conosce per ridurre la curva di apprendimento.
Se si parte da zero, secondo me la scelta più logica è andare su un Arduino basato su STM-32. I vantaggi sono:
1) oggi come oggi la diffusione di Arduino è colossale e ciò significa un'enormità di risorse a disposizioe
2) le schedine Arduino sono open source e si trovano dalla Cina a prezzi stracciati (es. i ProMini con ATMega32 a circa 1€ l'uno)
3) Arduino è un ambiente di sviluppo e supporta un'infinità di microcontrollori: nello stesso ambiente potete scrivere codice con le stesse convenzioni per ATMega, per STM, per gli ESP8266 e praticamente per tutto quello che esiste; questo è un enorme vantaggio per via del fatto che uno è subito operativo su una nuova piattaforma senza doversi trovare un ambiente di sviluppo nuovo da imparare

Si tenga presente che per programmare un microcontrollore di qualunque tipo, per molte cose è sufficiente copiare gli esempi che si trovano in rete, ma spesso e volentieri è richiesta la corretta comprensione della logica del microcontrollore, il che comprende un certo tempo di apprendimento.

Per quanto riguarda il Raspberry PI, avendo esposte delle GPIO (cioè porte di I/O programmabili dall'utente) rientra in parte in questa categoria. È penalizzato dal fatto di avere un consumo energetico elevato, di non disporre di convertitori A/D, di essere relativamente costoso rispetto ad altre soluzioni e, utilizzando linux, di non avere un funzionamento real-time. È avvantaggiato dal fatto di avere un intero sistema operativo, la possibilità di essere controllato con tastiera e monitor, la rete ethernet a bordo e molto spazio di memorizzazione.
Si tenga presente che l'offerta di microcontrollori è molto vasta e per "sopravvivere" si deve restringere la scelta a due/tre prodotti di prestazioni crescenti da impiegare in base all'applicazione. Ad esempio, come "all-purpose" per applicazioni semplici (in termini di quantità di codice e RAM richiesta) la soluzione ottimale secondo me al momento è l'ATMega32 per via della sua enorme diffusione e quantità sterminata di librerie. Questo controllore però raggiunge rapidamente i suoi limiti a causa dei soli 32k di flash e 2k ri RAM,
Dove serve più potenza di calcolo è ottimo la serie "STM32F4", venduto in schedine denominate "black pill" (con su i pin, l'USB, il regolatore di tensione, ecc.), che oltre a supportare numerose porte di I/O e conversioni analogico digitale, ha anche la FPU per i calcoli in virgola mobile.
Vi sono anche gli ESP8266 e i più recenti ESP32 (molto più ricchi di porte di I/O), che possono contenere un protocol stack TCP/IP e lavorare in WiFi, oltre ad essere usati come comuni microcontrollori.

La creazione di un frequenzimetro è abbastanza semplice: la parte più critica è ottenere un'onda quadra dalla pulizia e ampiezza adeguata dal segnale in ingresso. Aiuta un trigger di Schmitt.
A questo punto si tratta di collegare un interrupt ad un pin di un Arduino qualunque e contare gli impulsi. Con un timer si verifica periodicamente il numero di impulsi e da questo si ottiene la frequenza.
Se la frequenza è troppo elevata per le capacità di conteggio del microcontrollore, esistono dei circuiti integrati "prescaler", o "divisori di frequenza", che ogni "N" conteggi emettono un impulso. Ad esempio con un prescaler che divide per 1000 e riceve un segnale a 1MHz, il microcontrollore riceverà un segnale a 1KHz.
Sui datasheet dei vari prescaler si trovano indicati i valori di moltiplicazione e la frequenza massima supportata.

Ciao
Davide

matteo_:
ciao Davide, grazie per la completa risposta, comunque si per carità di soluzioni ce ne sono, magari posso prendere un prescaler, pero essendo che vorrei far un unica spesa, volevo prendere qualcosa di economico e che magari posso fare anche altre cose, quindi qualcosa di più performante di Arduino, ma non è neanche detto che io ne compra altri, arduino ne ho 3, quindi alla fine prendere altri integrati, faccio prima a prendere un altro microntroler più evoluto, tipo il kit che mi hanno consigliato o gli altri due che dicevo nei messaggi precedenti, vediamo, per ora uso il tester

perché alla fine posso comprare un frequenzimetro da pochi soldi che arrivano anche ai ghz senza perdere tempo, obbiettivo è l’economia


inviato iPhone using rogerKapp mobile

Geremia:
Listener, ma la conosci la differenza tra un programma interpretato e uno compilato ?. Credo proprio di no.
L'interpretato esegue una riga di istruzione ad alto livello convertendo ogni volta in una sequenza di operazioni, il prodotto del compilatore compilato invece e' un file in codice oggetto come sequenza di operazioni in linguaggio macchina che viene programmato sul micro una volta per tutte e quindi molto piu' veloce.

listener:
Forse non ci siamo capiti. Certo che la conosco la differenza tra un programma interpretato e compilato. Io cercavo di consigliare un inizio come si deve, imparando a fondo come funziona un microcontoller e un linguaggio ampiamente diffuso come il c. Arduino si programma in wired, io l'ho provato una volta e buttato nel cassetto, non ha assolutamente niente a che fare con la logica di un microc, in tutto a partire dalla sintassi. Perdi tempo ad usare quelli e appena ti serve qualcosa di serio sei fregato. A quel punto tanto vale usare i basicstamp, quelli erano realmente interpretati, ma almeno si avvicinavano maggiormente all'approccio reale.

IZ2UUF (davj2500):

--- Citazione da: listener - 23 Ottobre 2021, 17:54:57 ---Forse non ci siamo capiti. Certo che la conosco la differenza tra un programma interpretato e compilato. Io cercavo di consigliare un inizio come si deve, imparando a fondo come funziona un microcontoller e un linguaggio ampiamente diffuso come il c. Arduino si programma in wired, io l'ho provato una volta e buttato nel cassetto, non ha assolutamente niente a che fare con la logica di un microc, in tutto a partire dalla sintassi. Perdi tempo ad usare quelli e appena ti serve qualcosa di serio sei fregato. A quel punto tanto vale usare i basicstamp, quelli erano realmente interpretati, ma almeno si avvicinavano maggiormente all'approccio reale.

--- Termina citazione ---

Ciao Listener.

Arduino non si programma in "wired". Arduino fornisce un "framework" che si chiama "Wiring" che è composta da una IDE, un compilatore C/C++ ed una serie di librerie.
Il codice C/C++ che si scrive nella IDE può usare le librerie Wiring di Arduino o quello che vuoi tu.
In altre parole, da dentro la IDE di Arduino puoi scrivere in "C" (o in assembler) qualunque cosa in base al tuo livello di competenza.
La differenza rispetto agli ambienti "professionali" è che l'ambiente "Arduino" supporta in più la libreria "Wiring" che facilita la vita ai principianti, ma non pone alcun limite agli esperti in termini di codice che si possa scrivere.
Perché la sintassi di "Wiring" (che è la sintassi del C/C++) non sarebbe adatta ai microcontrollori?

Ciao
Davide

Navigazione

[0] Indice dei post

[#] Pagina successiva

[*] Pagina precedente

Vai alla versione completa