kym Inserito: 19 marzo 2016 Segnala Inserito: 19 marzo 2016 ho un sorgente con delle istruzioni che mi servono ma è fatto con arduino. io uso atmel studio, c'è modo di convertirlo in C ? devo fare delle modifiche non mi basta compilarlo.... grazie
kym Inserita: 19 marzo 2016 Autore Segnala Inserita: 19 marzo 2016 Ho un sorgente o sketch credo si chiami, creato per arduino lo vorrei convertire in C e portarlo dentro ad Atmel studio è possibile in qualche modo?
walterword Inserita: 19 marzo 2016 Segnala Inserita: 19 marzo 2016 il lingaggio di arduino è C/C++ ....non capisco , prova a postare il codice Se non usi le funzioni del framework Arduino devi conoscere le funzioni e/o built in del micro che stai usando con atmel studio. Si chiama attività di porting
Livio Orsini Inserita: 20 marzo 2016 Segnala Inserita: 20 marzo 2016 Gli sketch di arduino sono praticamente scritti in "C". Comunque c'è un'opzione di Atmel studio per avere direttamente l'interfaccia con arduino. PS Come moderatore Non aprire più discussioni sul medesimo argomento. Ho riunito le due discussioni; continua solo con questa.
kym Inserita: 20 marzo 2016 Autore Segnala Inserita: 20 marzo 2016 Grazie Livio, non sapevo dove postarlo ho visto dopo anche la sezione arduino. #include <avr/sleep.h> int led = 0; boolean On = 1; int Power __attribute__ ((section (".noinit"))); void PowerDown () { set_sleep_mode(SLEEP_MODE_PWR_DOWN); ADCSRA &= ~(1<<ADEN); // Turn off ADC to save power sleep_enable(); sleep_cpu(); } void setup() { Power = !Power; if (!Power) PowerDown(); pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); // LED on delay(5000); // Wait for a second digitalWrite(led, LOW); // LED off PowerDown(); } Questo codice (un esempio di poche righe) è scritto con il core Tiny in arduino, se prendo questo codice e lo porto in atmel e cerco di compliarlo mi da una marea di errori non riconosce i comandi. Livo immagino tu ti riferisca al visualmicro, l'ho installato, mi son scaricato pure arduino ma non son riuscito a combinare nulla, se apro i sorgenti in Atmel li vedo, ma usano sempre i comandi arduino e se cerco di compilarlo con atmel mi da errore con arduino mi crea un HEX che se poi vado a metterlo dentro al micro mi dice che è per altro micro (l'ATmega di arduino appunto) anche se io ho specificato nel progetto tiny85 ..... Se li compilo e programmo tramite arduino vanno perfettamente, perché anche l'HEX fatto da arduino mi da errore se cerco di programmarlo tramite atmelstudio Quello interessante è questo: http://www.technoblogy.com/show?ZR2 Opportunatamente modificato (Livio ti ricordi il discorso accelerometro?) usa il convertitore analogico/digitale del tiny, cosa che a me servirà prossimamente per un altro progetto e volevo prendere spunti da qui per poi esporre il problema nel forum, anche avendo poi in mano i valori che mi servono in base alla decelerazione.
Livio Orsini Inserita: 20 marzo 2016 Segnala Inserita: 20 marzo 2016 Gli errori ci sono perchè, per prima cosa, ti mancano tutte le librie di arduino. Se vai a vedere i sorgenti delle librerie di arduino vedrai che son scritti in "C".
walterword Inserita: 20 marzo 2016 Segnala Inserita: 20 marzo 2016 le librerie di arduino sono scritte in C/C++ non solo ed esclusivamente in C ....vai a vedere le librerie . Il fatto di scrivere in C non significa che non supporti e che non ci siano parti di codice scritte in C++ . Il C non è OOP e le librerie in C si scrivono diveramente dal C++, sintatticamente parlando . In C non esiste il concetto di classe ed oggetti , rimane tutto alla struttura .In C++ la struttura viene potenziata con l'aggiunta anche di funzioni etc etc etc . Se vai a vedere la toolchain ..... Dopodichè vengono caricati ,in modo automatico, i moduli di arduino che sono scritti in C/C++ .Questo perchè l'ambiente è scritto su piattaforma Processing che si occupa di includere molte delle librerie arduino , per esempio se usi la print non c'e' bisogno di includere nulla perche lo fa il framework . Io le librerie le scrivo in C++ e le compilo con il framework arduino non con C++ manualmente con qualche make ....
Livio Orsini Inserita: 20 marzo 2016 Segnala Inserita: 20 marzo 2016 Quote le librerie di arduino sono scritte in C/C++ non solo ed esclusivamente in C ....vai a vedere le librerie Walter gia le idee sono un poco confuse, se poi vai a fare questi distinguo.... Aspetta che stia almeno a galla da solo, poi si può cominciare a correggere lo stile.
kym Inserita: 20 marzo 2016 Autore Segnala Inserita: 20 marzo 2016 Ma visualmicro le carica .... penso.... Se no a che serve? Cioè, dopo che ho messo visualmicro non mi da più gli stessi errori però per compilarlo, nonostante abbia configurato il path di arduino in visualmicro etc. mi da una marea di errori.... Poi cerca ovviamente l'atmel mega di arduino io invece ho un tiny85 ..... A parte che ogni tanto atmel studio mi va in crash da quando traffico con visualmicro e gli sketch. Walter e Livio, detto in due parole: cosa mi conviene fare? cercare di capirci tra arduino e atmel studio o separare le due cose senza cercare di andare dritto per la strada di atmel studio? visualmicro e per portarmi dentro atmelstudio sorgenti e librerie di arduino che vantaggi mi darebbe? io pensavo addirittura si potesse convertire poi in atmel studio ma ho capito che non è possibile per le diverse librerie. Ho visto che comunque arduino usa librerie AVR che sono le stesse di atmelstudio ma poi i comandi base non c'entrano niente. Tieni presente che son 3-4 giorni che ho in mano sta "roba" e che non ho mai programmato un atmel in vita mia fino a 3-4 giorni fa. Avevo molti anni fa approcciato con i PIC modificando qualche sorgente già fatto ma niente di mio.
walterword Inserita: 20 marzo 2016 Segnala Inserita: 20 marzo 2016 Livio . non c'entra niente stare a galla o meno ... Ho copiato ed incollato il tuo codice in Atmel Studio 6.2 + Visual Micro , configurazione che uso per il WSystem , e compila tutto senza problemi. Devi selezionare Arduino Uno dalla tendina di visual micro perche se compili per Arduino Due , per esempio, ti da' errori in quanto il compilatore e tutta la tool chain è diversa e di conseguenza anche tutti i file header del sistema. Prova a compilare per arduino uno e vedi cosa esce .In alcuni casi includere ed usare dei file header con relativi funzioni da errore perchè sono già implementati dal framework direttamente senza che tu lo sappia ....
Livio Orsini Inserita: 21 marzo 2016 Segnala Inserita: 21 marzo 2016 Quote Livio . non c'entra niente stare a galla o meno ... C'entra, centra. Potevi dirlo subito cosa doveva fare.
walterword Inserita: 21 marzo 2016 Segnala Inserita: 21 marzo 2016 il service con la gente arrogante lo faccio gia durante le ore lavorative Quando scrivo un messaggio qui , talvolta lo inizializzo ma non lo invio finchè non faccio altre cose o prove . Io do sempre fiducia all'essere umano , in questo caso presumo che l'utente sappia selezionare la scheda di interesse. Poi approfondisco ....
kym Inserita: 21 marzo 2016 Autore Segnala Inserita: 21 marzo 2016 Allora.... stamattina si è aggiornato il framework di atmelstudio 7 .... ora per esempio se clicco su crea nuovo progetto arduino non mi da più il messaggio d'errore che mi dava ieri e dovevo fare il passaggio nuovo progetto e poi dopo selezionare arduino ed è li che a volte si piantava, ora funziona regolarmente dalla sua funzione iniziale. Quindi ho proceduto così: nuovo progetto arduino direttamente dall'icona arduino (non si è piantato :-) incollato il listato settato nelle proprietà del progetto simulatore e attiny85 (ora nella barra di visualmicro non vedo più atmel328) però ad ogni tentativo di build&upload o anche solo build cambia e diventa ATMEGA2560 nelle proprietà di visualmicro ho dovuto mettere attiny85 (ho aggiunto l'estensione ad arduino per il tiny85, io non ho aduino ma il tinyusb) provato a fare build oppure build&upload mi risponde questo: Compiling debug version of 'Test' for 'ATtiny w/ ATtiny85' Test.ino:In function 'void setup() Test.ino:14:57: error: 'Serial' was not declared in this scope :void setup() { debugger: The error shown above might be caused by invalid breakpoint syntax? Error compiling project sources 14:57 dovrebbero essere le righe? linea 14 corrisponde ma 57 cosa rappresenta? però se vado con lo start senza debug funziona, programma il micro e il led lampeggia però lo stesso listato in arduino ide nativo non da errori..... non è che ci sono ancora problemi con le versioni di atmelstudio? io uso la 7 ed ho visto che visualmicro per atmel è defunto tra le altre cose....:-( ps: ho modificato loop void loop() { digitalWrite(led, HIGH); // LED on delay(1000); // Wait for a second digitalWrite(led, LOW); // LED off delay(1000); loop(); }
kym Inserita: 23 marzo 2016 Autore Segnala Inserita: 23 marzo 2016 Ho reinstallato atmelstudio e visualmicro..... Installato prima l'aggiornamento di atmelstudio e SOLO dopo visualmicro. Adesso funziona, non si pianta più niente. Sto approfondendo un po' tutto, anche se in questi giorni ho poco tempo. L'esempio su l'ho abbandonato (non ho capito dove era il problema ma non ha senso perderci tempo) Quindi mi son dedicato a qualcosa di più interessante un pushbutton 4 in 1. Per ora voglio studiarlo e fare delle prove, poi chiederò aiuto se non riesco a fare una modifica particolare nel listato. Timerizzare un solo pulsante, ci sono riuscito, il timer funziona ma avviene qualcosa di strano: click singolo ON-----> off dopo 5 secondi. click singolo non succede niente ---> il micro interpreta il click come lo spegnimento (non memorizza lo spegnimento dato dal timer) click singolo ON-----> off dopo 5 secondi e la cosa si ripete, e non capisco dove è l'arcano che tiene in memoria che prima era ON e quindi il timer lo mette OFF senza interrompere la funzione o il conteggio dei decimi di secondo che contano se click singolo, doppio, prolungato o molto prolungato. Dopo il timer OFF se clicco deve accendersi senza che debba cliccare due volte. Approfondiremo più avanti ora voglio un po' studiare. Vorrei però una delucidazione da chi programma, mi pare di capire che sia Livio che Walter conoscono molto bene questi sistemi Atmel. La domanda è sul debug: quando io faccio il debug mi indica i punti break e mi controlla gli errori, ma finisce li. Io per esempio ho un listato di cui non riesco a capire dopo una funzione dove si ferma il micro, insomma vedere in che punto del listato è al momento e tutti i passi che compie durante il funzionamento: esempio doppio click vorrei vedere tutto a video, riga per riga ad ogni input che do al micro che parte del listato interviene. Si può fare? Come? con la JTAG ? Vorrei sapere se è questo l'oggetto del desiderio: http://www.waveshare.com/product/mcu-tools/avr/programmers-debuggers/usb-avr-jtagice-xpii.htm E se quello che chiedo è possibile, con ATtiny85 e con quale collegamento perché in caso affermativo prenderei il suddetto programmatore invece del classico mk2 (usbtiny è molto limitato in atmelstudio). Mi si è aperto un mondo :-) un solo 8pin al posto di quasi 40 componenti per fare dei timer e bottoni mi facilita moltissimo e scatena la mia fantasia.
kym Inserita: 26 marzo 2016 Autore Segnala Inserita: 26 marzo 2016 Stavo provando ad usare la libreria di Walter (Wtimer) mi chiedevo, funziona solo da loop? a me servirebbe un timer messo qui che mi mandi alta un uscita per X secondi. void clickEvent_on() { mytimers.runTimers(millis()); mytimers.timer[1].Start; digitalWrite(ledPin1,mytimers.timer[1].Done); } Ho provato così ma non va.... Ho ovviamente messo nel setup la configurazione del timer mytimers.presetTimer(1,3000,TOF); mytimers.initTimers(millis()); e l'include all'inizio. #include <WTimer.h> WTimer mytimers; Vorrei capire anche una cosa: alcuni codici (sempre timer e bottoni) necessitano di mandare a livello basso il pin del bottone, altri a livello alto (esempio WTOF) pur avendo le stesse identiche istruzioni e comandi di altri codici.... dipende dalle librerie utilizzate? sta cosa non l'ho capita.
Livio Orsini Inserita: 27 marzo 2016 Segnala Inserita: 27 marzo 2016 Se usi le librerie standard bloccano il processo. Tevi usare un interrupts legato ad un timer; io solitamente uso per queste cose timer1 con interrupt a 10ms così da avere una granularità sufficientemente fine ma senza interrompere troppo frequentemente il programma.
kym Inserita: 27 marzo 2016 Autore Segnala Inserita: 27 marzo 2016 mi daresti un esempio da cui attingere di un timer che usi? Livio con il programmatore che dico su, AVR DEBUGGER, JTAG etc. posso fare quello che penso o .... vorrei qualcosa che non esiste? Cosa posso fare nel debug con questo dispositivo? cosa posso vedere? http://www.waveshare.com/product/mcu-tools/avr/programmers-debuggers/usb-avr-jtagice-xpii.htm
Livio Orsini Inserita: 27 marzo 2016 Segnala Inserita: 27 marzo 2016 Per quello che lo fan pagare dovresti poter fare tutto, anche il caffè. Bisognerebbe leggere le specifiche complete ma mi aspetto che tu possa mettere almeno un breaek point, vedere lo stato dei registri, memorie, istruzioni, etc. void setup { ------ noInterrupts(); // disable all interrupts TCCR1A = 0; TCCR1B = 0; TCNT1 = 6491; // preload timer TCCR1B |= (1 << CS12); // 256 prescaler TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt interrupts(); // enable all interrupts ------- } ISR(TIMER1_OVF_vect) // interrupt service routine { TCNT1 = 64911; // preload timer per interrupts ogni 10 ms /* routine di servizio interrupt*/ }
kym Inserita: 28 marzo 2016 Autore Segnala Inserita: 28 marzo 2016 Livio su che micro usi questo listato?
kym Inserita: 28 marzo 2016 Autore Segnala Inserita: 28 marzo 2016 Infatti nel tiny85 non va... Vanno cambiati un sacco di parametri ho dato un occhiata sui datasheet ma mi son perso con un bit del registro B che non c'è proprio o non ho capito io bene i dettagli. Non ho nemmeno arduino per provare. Il wtof non son riuscito a farlo andare dentro un evento... Se lo metto in loop mi inverte polarità del bottone e mi rimane bloccato fino a quando non finisce ovvero gli altri eventi non vanno idem l'interruzione. Come me funziona il debug con il programmatore che ho linkato più su? Via seriale? Per sapere che sta facendo il micro va bene?
Livio Orsini Inserita: 28 marzo 2016 Segnala Inserita: 28 marzo 2016 Come funziona non lo so di preciso; posso immaginare che lavori come tutti gli "in circuit" in cui il processore dello strumento fa avanzare il processore target di un passo alla volta e, arrivato al punto di stop, si fermi. Infatti lavorando sotto emulatore il programma è un poco più lento.
walterword Inserita: 28 marzo 2016 Segnala Inserita: 28 marzo 2016 kym , sinceramente non ho ancora capito cosa stai facendo ....i WTimer sono forniti con i sorgenti , ho scritto gli esempi , ho fatto dei video , ho fatto altri video in cui li suo ....non lo so ....se hai un evento setti nel suo interno un bit e con questo fai partire il timer , quando hai il done fai quello che vuoi , e' logica
kym Inserita: 28 marzo 2016 Autore Segnala Inserita: 28 marzo 2016 Il problema Walter è che io sono pochi giorni che sono entrato in questo mondo della programmazione, faccio parecchia fatica a comprendere quello che mi dici, per te è semplice ma per me è quasi (lingua che ora non pronuncio per rispetto alle vittime).... Io ho un sorgente che funziona con ATtiny85 http://forum.arduino.cc/index.php?topic=14479.0 Funziona tutto, io l'ho modificato qui: void loop() { // Get button event and act accordingly int b = checkButton(); if ((b == 1) && digitalRead(ledPin1) == LOW) clickEvent_on(); else if ((b == 1) && digitalRead(ledPin1) == HIGH) clickEvent_off(); if (b == 2) doubleClickEvent(); if (b == 3) holdEvent(); if (b == 4) longHoldEvent(); in modo da avere due differenti eventi per il click singolo ed ho modificato il primo richiamo ed aggiunto il secondo in modo da non avere il riconoscimento dello stato precedente del bottone ma un controllo sul led se acceso o spento ed avere la possibilità una volta inserito un timer nel clickEvent_on (12 minuti) che io possa disattivare tutto premendo nuovamente il bottone con singolo click. void clickEvent_on() { // ledVal1 = !ledVal1; // digitalWrite(ledPin1, ledVal1); mytimers.timer[1].Start; digitalWrite(ledPin1,mytimers.timer[1].Done); } void clickEvent_off() { // ledVal1 = !ledVal1; // digitalWrite(ledPin1, ledVal1); digitalWrite(ledPin1, LOW); Ho provato a mettere il TOF dentro l'evento ovviamente dopo aver messo il richiamo nel loop, ho provato in diversi modi ma non son riuscito nell'intento. Devo dire un'altra cosa: il TOF il file di demo e l'esempio seguendo il tutorial necessita per partire di un livello alto al pin del pulsante invece questo sorgente usa il livello basso quindi il pulsante è a massa. Quindi quando nello stesso micro carico il demo TOF devo cambiare la configurazione elettrica per dare allo stesso pin un +5 invece di una massa. Quando ho messo tutto il TOF nel loop o si blocca tutto e non vanno nemmeno le altre funzioni (doppio click, etc) oppure mi rimane il led fisso acceso senza che si possa più spegnere, presumo per la differente polarità del pulsante, forse rilevando il livello alto che è sempre alto ad aspettare quello basso il TOF sta fisso come se tenessi premuto costantemente il pulsante. La seconda modifica che vorrei poter studiare e fare è dividere (cosa che l'autore invece ha unito) i due ultimi eventi: se io tengo premuto il bottone più di 1 secondo scatta evento 3 ..... se io tengo premuto il bottone più di 3 secondi scatta prima evento 3 dopo 1 secondo e poi evento 4 dopo 3 .... Io li vorrei isolati: se premo più di 3 secondi non deve scattare anche evento 3 ma solo il 4 .... Perché succede questo: per accendere SOLO evento 4 io devo fare così: tenere premuto più di 3 secondi il pulsante e mi ritrovo acceso evento 3 e 4 poi premere più di 1 secondo per spegnere il 3.. e per spegnere devo per forza passare dall'accensione del 3 (premere più di 3 secondi comporta si lo spegnimento del 4 ma anche l'accensione del 3).
kym Inserita: 28 marzo 2016 Autore Segnala Inserita: 28 marzo 2016 Quote Come funziona non lo so di preciso; posso immaginare che lavori come tutti gli "in circuit" in cui il processore dello strumento fa avanzare il processore target di un passo alla volta e, arrivato al punto di stop, si fermi. Infatti lavorando sotto emulatore il programma è un poco più lento. Ma io a video riesco a vedere esattamente dove è il programma? tipo: digitalWrite(rel1, HIGH) delay(300000) Io a video vedo che è fermo al delay o devo mettere delle istruzioni per scrivere sulla seriale istruzione per istruzione in modo che comunica con il software (AtmelStudio) tramite la seriale? o viene visto in altra maniera?
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora