<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Commenti a: Corso programmazione PICMicro in C – Lezione 9 – Gestione della EEprom interna.Visualizzazione valore a 32bit da eeprom a lcd e counter up/down con reset e memoria</title>
	<atom:link href="http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/</link>
	<description></description>
	<lastBuildDate>Wed, 08 Feb 2012 18:15:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Di: gabrielegalli</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-13125</link>
		<dc:creator>gabrielegalli</dc:creator>
		<pubDate>Mon, 07 Nov 2011 14:16:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-13125</guid>
		<description>Buongiorno Giovanni.
Lavoro con un pickit2 e un pic16f886.
Carico la EEPROM alla programmazione. il contenuto lo metto in output su una porta e lo leggo con un analizzatore di stati logici.
Non appena stacco il programmatore pickit2 e alimento dall&#039;esterno l&#039;output va a zero indefinitamente.
Potresti spiegarmi cortesemente perchè?</description>
		<content:encoded><![CDATA[<p>Buongiorno Giovanni.<br />
Lavoro con un pickit2 e un pic16f886.<br />
Carico la EEPROM alla programmazione. il contenuto lo metto in output su una porta e lo leggo con un analizzatore di stati logici.<br />
Non appena stacco il programmatore pickit2 e alimento dall&#8217;esterno l&#8217;output va a zero indefinitamente.<br />
Potresti spiegarmi cortesemente perchè?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-8777</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sun, 26 Dec 2010 23:10:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-8777</guid>
		<description>http://www.settorezero.com/wordpress/picmicro/articoli-propedeutici/

Algebra booleana</description>
		<content:encoded><![CDATA[<p><a href="http://www.settorezero.com/wordpress/picmicro/articoli-propedeutici/" rel="nofollow">http://www.settorezero.com/wordpress/picmicro/articoli-propedeutici/</a></p>
<p>Algebra booleana</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-8771</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sun, 26 Dec 2010 21:04:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-8771</guid>
		<description>Ho sbagliato a scrivere il 10: alla macro bisogna fornire dei blocchi da 8 bytes. Quindi se vuoi memorizzare 1 solo valore, devi comunque fornirne 8 (gli altri 7 li metti a zero), se ne vuoi memorizzare 9 devi fornirne 16. I valori che ho messo sono a casaccio e valgono come esempio... è ovvio che quando hai bisogno di memorizzare dei valori nella eeprom durante la compilazione li ci metti i valori che servono a te...</description>
		<content:encoded><![CDATA[<p>Ho sbagliato a scrivere il 10: alla macro bisogna fornire dei blocchi da 8 bytes. Quindi se vuoi memorizzare 1 solo valore, devi comunque fornirne 8 (gli altri 7 li metti a zero), se ne vuoi memorizzare 9 devi fornirne 16. I valori che ho messo sono a casaccio e valgono come esempio&#8230; è ovvio che quando hai bisogno di memorizzare dei valori nella eeprom durante la compilazione li ci metti i valori che servono a te&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: odessos</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-8769</link>
		<dc:creator>odessos</dc:creator>
		<pubDate>Sun, 26 Dec 2010 19:28:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-8769</guid>
		<description>Intanto faccio gli auguri di buon tutto, poi faccio la domandina: all&#039;inizio di questa sezione di corso parli ai una serie di valori che sono da inserire nella eeprom all&#039;inizio del programma con la macro _eeprom_data, non capisco, parli di 10 valori ma in realtà sono due file da 8?
Questi valori sono generici o c&#039;è una tabella precisa da inserire, nel manuale del compilatore Hitec-C parla di valori progressivi da 0x00 a 0x0F.</description>
		<content:encoded><![CDATA[<p>Intanto faccio gli auguri di buon tutto, poi faccio la domandina: all&#8217;inizio di questa sezione di corso parli ai una serie di valori che sono da inserire nella eeprom all&#8217;inizio del programma con la macro _eeprom_data, non capisco, parli di 10 valori ma in realtà sono due file da 8?<br />
Questi valori sono generici o c&#8217;è una tabella precisa da inserire, nel manuale del compilatore Hitec-C parla di valori progressivi da 0&#215;00 a 0&#215;0F.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6220</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Wed, 14 Jul 2010 13:21:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6220</guid>
		<description>Guarda... Pure io non vedo l&#039;ora di mettere online tante di quelle cose che ho accantonate... I2C, RTC, PWM, ponti H ecc ecc Il problema, come vedi, è che sono fin troppo meticoloso e ci perdo davvero tanto tempo che non lo immagini. Poi ultimamente la bimba non mi da tregua, in aggiunta il caldo e tanti altri impegni che ho che davvero non riesco a fare nulla. Se vuoi, appena li trovo, ti mando i codici per l&#039;I2C e per il ds1307 via email così magari ci fai pure qualche test e mi aiuti. 

Quello dell&#039;I2C è una versione che ho riadattato da un sorgente per CCS e funziona bene, la libreria per il DS1307 me la sono scritta io e si appoggia alla libreria I2C, pare che funziona benone ma non si può mai dire (la sfiga è sempre dietro l&#039;angolo). 

E&#039; una cosa fatta bene, come avrai potuto vedere non si trova niente di buono già pronto in giro: sempre codici &quot;mozzicati&quot;, non documentati e lacunosi. Appena ho tempo di cercarli e se li trovo te li mando al tuo indirizzo email, tanto i codici come mio solito sono abbastanza commentati e dovrebbe essere chiaro tutto. Per i collegamenti però te la vedi tu, tanto non è niente di difficoltoso: basta ricordarsi di mettere le resistenze di pullup sulle due linee I2C, per il resto fa tutto il codice. 

I forum dove in genere &quot;opero&quot; io sono quelli di Sergio Fiocco (che ora si è spostato su www.taliaki.net) o quello di robot-italy (www.robot-italy.net). C&#039;è anche il forum di roboitalia: forum.roboitalia.com 

Il codice me lo manderai quando è a buon punto ;) tanto per ora non ho nemmeno il tempo di provarlo.</description>
		<content:encoded><![CDATA[<p>Guarda&#8230; Pure io non vedo l&#8217;ora di mettere online tante di quelle cose che ho accantonate&#8230; I2C, RTC, PWM, ponti H ecc ecc Il problema, come vedi, è che sono fin troppo meticoloso e ci perdo davvero tanto tempo che non lo immagini. Poi ultimamente la bimba non mi da tregua, in aggiunta il caldo e tanti altri impegni che ho che davvero non riesco a fare nulla. Se vuoi, appena li trovo, ti mando i codici per l&#8217;I2C e per il ds1307 via email così magari ci fai pure qualche test e mi aiuti. </p>
<p>Quello dell&#8217;I2C è una versione che ho riadattato da un sorgente per CCS e funziona bene, la libreria per il DS1307 me la sono scritta io e si appoggia alla libreria I2C, pare che funziona benone ma non si può mai dire (la sfiga è sempre dietro l&#8217;angolo). </p>
<p>E&#8217; una cosa fatta bene, come avrai potuto vedere non si trova niente di buono già pronto in giro: sempre codici &#8220;mozzicati&#8221;, non documentati e lacunosi. Appena ho tempo di cercarli e se li trovo te li mando al tuo indirizzo email, tanto i codici come mio solito sono abbastanza commentati e dovrebbe essere chiaro tutto. Per i collegamenti però te la vedi tu, tanto non è niente di difficoltoso: basta ricordarsi di mettere le resistenze di pullup sulle due linee I2C, per il resto fa tutto il codice. </p>
<p>I forum dove in genere &#8220;opero&#8221; io sono quelli di Sergio Fiocco (che ora si è spostato su <a href="http://www.taliaki.net" rel="nofollow">http://www.taliaki.net</a>) o quello di robot-italy (www.robot-italy.net). C&#8217;è anche il forum di roboitalia: forum.roboitalia.com </p>
<p>Il codice me lo manderai quando è a buon punto ;) tanto per ora non ho nemmeno il tempo di provarlo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6218</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Wed, 14 Jul 2010 10:43:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6218</guid>
		<description>Mah vabbè, io intanto sospendo un po questo progetto, mi sta dando fin troppi grattacapi, e con questo caldo, diciamo che le cose si complicano non poco.
Avevo intenzione di postare il  problema sul forum della microchip o su ioprogrammo.it, dove posso trovare un forum con un valido supporto?
Comunque, vuoi che ti spedisca il sorgente prodotto?con tutte le varianti pregresse?
A quando il tuo articolo sull&#039;i2c? Qua lo stiamo aspettando con ansia! I miei ds1307 si stanno sciogliendo dal caldo nell&#039;attesaa! =)
Grazie ancora di tutto, Luca</description>
		<content:encoded><![CDATA[<p>Mah vabbè, io intanto sospendo un po questo progetto, mi sta dando fin troppi grattacapi, e con questo caldo, diciamo che le cose si complicano non poco.<br />
Avevo intenzione di postare il  problema sul forum della microchip o su ioprogrammo.it, dove posso trovare un forum con un valido supporto?<br />
Comunque, vuoi che ti spedisca il sorgente prodotto?con tutte le varianti pregresse?<br />
A quando il tuo articolo sull&#8217;i2c? Qua lo stiamo aspettando con ansia! I miei ds1307 si stanno sciogliendo dal caldo nell&#8217;attesaa! =)<br />
Grazie ancora di tutto, Luca</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6208</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Tue, 13 Jul 2010 16:45:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6208</guid>
		<description>per il resto non ti so rispondere...</description>
		<content:encoded><![CDATA[<p>per il resto non ti so rispondere&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6207</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Tue, 13 Jul 2010 16:44:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6207</guid>
		<description>E&#039; ovvio che non ho richiesto i &quot;future products&quot; ma quelli disponibili. Solo che alcuni di quelli &quot;disponibili&quot; avevano la disponibilità tra oltre 80 giorni. 

Quell&#039;errore di &quot;expected ;&quot; non ha senso, è capitato alcune volte anche a me mettendo delle routine di delay sui pic12, mi dava un errore del genere o errore di sintassi, quando la sintassi era assolutamente corretta, preso dallo sconforto i ritardi poi li gestii con gli interrupt. Secondo me si tratta di un altro bug. Dovresti postarlo nel forum della microchip.</description>
		<content:encoded><![CDATA[<p>E&#8217; ovvio che non ho richiesto i &#8220;future products&#8221; ma quelli disponibili. Solo che alcuni di quelli &#8220;disponibili&#8221; avevano la disponibilità tra oltre 80 giorni. </p>
<p>Quell&#8217;errore di &#8220;expected ;&#8221; non ha senso, è capitato alcune volte anche a me mettendo delle routine di delay sui pic12, mi dava un errore del genere o errore di sintassi, quando la sintassi era assolutamente corretta, preso dallo sconforto i ritardi poi li gestii con gli interrupt. Secondo me si tratta di un altro bug. Dovresti postarlo nel forum della microchip.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6204</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Tue, 13 Jul 2010 08:45:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6204</guid>
		<description>Guarda che dei pic16f1827...allora l&#039;F1827, ok quello lo puoi richiedere nel 2013, l&#039;LF è già più disponibile, se non sbaglio con spedizione immediata, io personalmente, mi sono &quot;accontentato&quot; con un&#039;attesa di 30 giorni e ho preso direttamente il F1827 E/P...sai...qui fà molto caldo! =)
Comunque guarda se navighi, trovi la pagina dove presentano la nuova serie 16F1... la nuova serie xlp, vedi che quelli sono lo stato dell&#039;arte della microchip, delle mcu alla &quot;mary poppins&quot;.

Allora, guarda il DAC è l&#039;unica cosa che funge, insomma 5 bit son veramente pochi, però non ci possiamo lamentare, al massimo si aggiunge un passa basso e tagliamo la testa al toro; se levo tutta quella &quot;meccanica&quot; per la temporizzazione, ho una sinusoide &quot;perfetta&quot;, l&#039;oscilloscopio mi caccia una bella sinusoide, ovviamente la precisione è direttamente proporzionale al numero di punti, ed inversamente proporzionale alla frequenza. Il quarzo interno, anche non calibrandolo con OSCCTUNE (come si fà?) funziona bene o male a dovere.
Quindi diamo per funzionante la generazione della sinusoide.

Il problema è il calcolo del &quot;del&quot;; praticamente lo noto anche perchè, notato il malfunzionamento, ho dichiarato una variabile char da uguagliarla a del, giusto per inserirla nel watch del pickit, però non mi compila dandomi un errore strano, secondo me sbaglia a convertire in char.

******************************************************************************
char del=dlcal;
....
Error   [314] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\generatoresinusoidale.c; 33.28 &quot;;&quot; expected
******************************************************************************

ovviamente il 33.28 è esattamente 12 caratteri dopo il punto e virgola, sembrerebbe non riesce a convertire a char.
A maggior ragione lo noto, che praticamente indipendentemente dalla freq assegnata, la sinusoide generata è sempre la stessa!

Poi non parliamo di un&#039;altra cosa stranissima, tipo che la fmax varia, ieri pomeriggio era a 1720 ieri sera a 1240 (ed il quarzo lavora bene...); hai presente quando si parla di &quot;ripetibilità degli strumenti&quot;? Mah..

Siano benedetti di dspic.
Comunque ci sbatterò un altro po la testa fra oggi e domani, magari ti faccio sapere, bisognerebbe analizzare tutti i calcoli che fà inserendoli nel main e controllando gli arrotondamenti, comunque ovviamente l&#039;errore in frequenza è elevatissimo, questo già me lo aspettavo, del tipo anche 200Hz per uS in più o meno, però almeno sulle basse frequenze dovrebbe funzionare.
Bisogna analizzare il del, e vedere come lavora il preprocessore, c&#039;è qualche modo per analizzare le costanti col pickit? A quanto ho notato non c&#039;è modo di inserirle nel watch, ci trovo solo le variabili che effettivamente variano, nemmeno quelle che rimangono costanti pur definendole variabili.

Luca

(OT dell&#039;OT, ti ricordi quando ti chiedevo dell&#039;interrupt su portB e tu mi dicesti a che ti serve?, ecco, la risposta più sensata ( e più utilizzata ) è: &quot;per svegliare il pic dallo stato sleep&quot; )</description>
		<content:encoded><![CDATA[<p>Guarda che dei pic16f1827&#8230;allora l&#8217;F1827, ok quello lo puoi richiedere nel 2013, l&#8217;LF è già più disponibile, se non sbaglio con spedizione immediata, io personalmente, mi sono &#8220;accontentato&#8221; con un&#8217;attesa di 30 giorni e ho preso direttamente il F1827 E/P&#8230;sai&#8230;qui fà molto caldo! =)<br />
Comunque guarda se navighi, trovi la pagina dove presentano la nuova serie 16F1&#8230; la nuova serie xlp, vedi che quelli sono lo stato dell&#8217;arte della microchip, delle mcu alla &#8220;mary poppins&#8221;.</p>
<p>Allora, guarda il DAC è l&#8217;unica cosa che funge, insomma 5 bit son veramente pochi, però non ci possiamo lamentare, al massimo si aggiunge un passa basso e tagliamo la testa al toro; se levo tutta quella &#8220;meccanica&#8221; per la temporizzazione, ho una sinusoide &#8220;perfetta&#8221;, l&#8217;oscilloscopio mi caccia una bella sinusoide, ovviamente la precisione è direttamente proporzionale al numero di punti, ed inversamente proporzionale alla frequenza. Il quarzo interno, anche non calibrandolo con OSCCTUNE (come si fà?) funziona bene o male a dovere.<br />
Quindi diamo per funzionante la generazione della sinusoide.</p>
<p>Il problema è il calcolo del &#8220;del&#8221;; praticamente lo noto anche perchè, notato il malfunzionamento, ho dichiarato una variabile char da uguagliarla a del, giusto per inserirla nel watch del pickit, però non mi compila dandomi un errore strano, secondo me sbaglia a convertire in char.</p>
<p>******************************************************************************<br />
char del=dlcal;<br />
&#8230;.<br />
Error   [314] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\generatoresinusoidale.c; 33.28 &#8220;;&#8221; expected<br />
******************************************************************************</p>
<p>ovviamente il 33.28 è esattamente 12 caratteri dopo il punto e virgola, sembrerebbe non riesce a convertire a char.<br />
A maggior ragione lo noto, che praticamente indipendentemente dalla freq assegnata, la sinusoide generata è sempre la stessa!</p>
<p>Poi non parliamo di un&#8217;altra cosa stranissima, tipo che la fmax varia, ieri pomeriggio era a 1720 ieri sera a 1240 (ed il quarzo lavora bene&#8230;); hai presente quando si parla di &#8220;ripetibilità degli strumenti&#8221;? Mah..</p>
<p>Siano benedetti di dspic.<br />
Comunque ci sbatterò un altro po la testa fra oggi e domani, magari ti faccio sapere, bisognerebbe analizzare tutti i calcoli che fà inserendoli nel main e controllando gli arrotondamenti, comunque ovviamente l&#8217;errore in frequenza è elevatissimo, questo già me lo aspettavo, del tipo anche 200Hz per uS in più o meno, però almeno sulle basse frequenze dovrebbe funzionare.<br />
Bisogna analizzare il del, e vedere come lavora il preprocessore, c&#8217;è qualche modo per analizzare le costanti col pickit? A quanto ho notato non c&#8217;è modo di inserirle nel watch, ci trovo solo le variabili che effettivamente variano, nemmeno quelle che rimangono costanti pur definendole variabili.</p>
<p>Luca</p>
<p>(OT dell&#8217;OT, ti ricordi quando ti chiedevo dell&#8217;interrupt su portB e tu mi dicesti a che ti serve?, ecco, la risposta più sensata ( e più utilizzata ) è: &#8220;per svegliare il pic dallo stato sleep&#8221; )</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6200</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Mon, 12 Jul 2010 21:53:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6200</guid>
		<description>Tra l&#039;altro con mia grande sorpresa ho visto che sia il product selector che la ricerca parametrica sul sito della Microchip non hanno in elenco il DAC... Ho comunque trovato disponibile subito il 16F1939... che è un mostro... Adesso chissà quanto tocca aspettare</description>
		<content:encoded><![CDATA[<p>Tra l&#8217;altro con mia grande sorpresa ho visto che sia il product selector che la ricerca parametrica sul sito della Microchip non hanno in elenco il DAC&#8230; Ho comunque trovato disponibile subito il 16F1939&#8230; che è un mostro&#8230; Adesso chissà quanto tocca aspettare</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6199</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Mon, 12 Jul 2010 21:49:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6199</guid>
		<description>Non ti preoccupare... Se sei OT tu è meglio che chiudiamo! Potrei pensare che succede qualche cosa con i tipi di variabile... Il &quot;Mul&quot; lo fai calcolare al preprocessore, però nei calcoli ci metti dentro un 3.14, così com&#039;è dichiarato penso tiri fuori un valore intero con un&#039;approsimazione strana... Il fatto è che non puoi certo dichiararlo di tipo float perchè poi al dac devi comunque passare un intero... Non ti saprei dire ... se no puoi provare a dichiararlo come float tanto poi foi forzi il casting in char.  Per il resto mi sembra ok....Non vedo perchè non debba funzionare... In teoria mi sembra che non faccia una piega... Il guaio è che non ho mai avuto l&#039;occasione di utilizzare un pic con il DAC integrato quindi non è che posso esserti d&#039;aiuto piu di tanto... Ho fatto la richiesta alla microchip ma questi pic qui avevano la disponibilità tra 90 giorni e così ho desistito. Certo che con solo 5 bit chissà se si riesce a tirare fuori una bella sinusoide... Hai fatto pure delle prove utilizzando un quarzo esterno anzichè quello interno? A me a volte con l&#039;oscillatore interno pure sono successe cose strane, suppongo che il caldo a volte li fa impazzire. Con un oscilloscopio hai provato? Cosa ti tira fuori?</description>
		<content:encoded><![CDATA[<p>Non ti preoccupare&#8230; Se sei OT tu è meglio che chiudiamo! Potrei pensare che succede qualche cosa con i tipi di variabile&#8230; Il &#8220;Mul&#8221; lo fai calcolare al preprocessore, però nei calcoli ci metti dentro un 3.14, così com&#8217;è dichiarato penso tiri fuori un valore intero con un&#8217;approsimazione strana&#8230; Il fatto è che non puoi certo dichiararlo di tipo float perchè poi al dac devi comunque passare un intero&#8230; Non ti saprei dire &#8230; se no puoi provare a dichiararlo come float tanto poi foi forzi il casting in char.  Per il resto mi sembra ok&#8230;.Non vedo perchè non debba funzionare&#8230; In teoria mi sembra che non faccia una piega&#8230; Il guaio è che non ho mai avuto l&#8217;occasione di utilizzare un pic con il DAC integrato quindi non è che posso esserti d&#8217;aiuto piu di tanto&#8230; Ho fatto la richiesta alla microchip ma questi pic qui avevano la disponibilità tra 90 giorni e così ho desistito. Certo che con solo 5 bit chissà se si riesce a tirare fuori una bella sinusoide&#8230; Hai fatto pure delle prove utilizzando un quarzo esterno anzichè quello interno? A me a volte con l&#8217;oscillatore interno pure sono successe cose strane, suppongo che il caldo a volte li fa impazzire. Con un oscilloscopio hai provato? Cosa ti tira fuori?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6197</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Mon, 12 Jul 2010 21:13:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6197</guid>
		<description>Lo so lo so, stiamo sforando in un OT colossale, (ma un forum qui no?).
Insomma, non riesco proprio a rendere il codice versatile al punto da inserire direttamente la frequenza desiderata nel codice. Ti posto tutto il codice commentato, inutile dirti che il timing è tutto sballato, i calcoli teoricamente esatti sono praticamente inefficaci! Non fanno assolutamente quello che devono fare, o almeno lo fanno parecchio male. Mi daresti qualche tua idea sul mio listato? Cosa ne pensi?

******************************************************************************

#include 
#include 
#define	PIC_CLK 32000000
#include 	&quot;delay.c&quot;

// Fuses di configurazione
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; 
		  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);

//Faccio fare i conti al preprocessore invece che al pic, e svolgo tutti calcoli possibili a priori
#define punti 	180//selezionare quanti punti per sinusoide mettere (45/90/180/360)
#define pnt 	punti-1
#define mul 	(360/punti)*(3.14159265359/180)


#define fre		100 //frequenza desiderata
#define fmax	1240 //frequenza massima generata commentando la riga di ritardo nella generazione	
#define del		(((1/fre)/punti)-(1/fmax)/punti)/1000000 

//mi calcolo il ritardo da aggiungere ad ogni ciclo in modo da raggiungere la frequenza desiderata
//ho la frequenza massima, mi calcolo il quanto di tempo per ogni ciclo, faccio la differenza
//con il quanto di tempo ideale per ogni ciclo, e lo converto in microsecondi

unsigned char dac[pnt]; //lo inserisco qui per evitare il bug secondo il quale se non dichiarata globale 
						//l&#039;array non può superare gli 80 char
int t=0;

void main(void)
        {
		OSCCON=0b11110000;  //Oscillatore a 32MHz
		TRISA=0b00000100;
		TRISB=0b00000000;
		ANSELA=0b00000100;
		ANSELB=0b00000000;
		DACCON0=0b11100000;

		for(t;t&lt;pnt;t++)
			dac[t]=0b10000+(char)(0b1111*sin(t*mul));
	
		while(1)
			{
			t=0;
			for(t;t&lt;pnt;t++)
				{DACCON1=dac[t];
				DelayUs(del);
				}
			}
					
		}

#include 
#include 
#define	PIC_CLK 32000000
#include 	&quot;delay.c&quot;

// Fuses di configurazione
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; 
		  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);

//Faccio fare i conti al preprocessore invece che al pic, e svolgo tutti calcoli possibili a priori
#define punti 	180//selezionare quanti punti per sinusoide mettere (45/90/180/360)
#define pnt 	punti-1
#define mul 	(360/punti)*(3.14159265359/180)


#define fre		100 //frequenza desiderata
#define fmax	1240 //frequenza massima generata commentando la riga di ritardo nella generazione	
#define del		(((1/fre)/punti)-(1/fmax)/punti)/1000000 

//mi calcolo il ritardo da aggiungere ad ogni ciclo in modo da raggiungere la frequenza desiderata
//ho la frequenza massima, mi calcolo il quanto di tempo per ogni ciclo, faccio la differenza
//con il quanto di tempo ideale per ogni ciclo, e lo converto in microsecondi

unsigned char dac[pnt]; //lo inserisco qui per evitare il bug secondo il quale se non dichiarata globale 
						//l&#039;array non può superare gli 80 char
int t=0;

void main(void)
        {
		OSCCON=0b11110000;  //Oscillatore a 32MHz
		TRISA=0b00000100;
		TRISB=0b00000000;
		ANSELA=0b00000100;
		ANSELB=0b00000000;
		DACCON0=0b11100000;

		for(t;t&lt;pnt;t++)
			dac[t]=0b10000+(char)(0b1111*sin(t*mul));
	
		while(1)
			{
			t=0;
			for(t;t&lt;pnt;t++)
				{DACCON1=dac[t];
				DelayUs(del);
				}
			}
					
		}
******************************************************************************
Ok ci sono parecchie cose da fare, per esempio gestire in automatico il numero di punti ottimale (con 180 non si puo superare il kHz e mezzo), ok bisogna comunque prevenire l&#039;overflow di del quando utilizzato su DelayUs() [Nb. uso le routine di delay di microchipc.com].. ma almeno per grandi linee..perchè non fungeee?

Quando la matematica, approssimata, diventa un opinione.

Ps. debuggando col pickit, controllando i valori con watch expression, inserendo i calcoli nel main, escono valori strani.

Le tue idee a caldo?</description>
		<content:encoded><![CDATA[<p>Lo so lo so, stiamo sforando in un OT colossale, (ma un forum qui no?).<br />
Insomma, non riesco proprio a rendere il codice versatile al punto da inserire direttamente la frequenza desiderata nel codice. Ti posto tutto il codice commentato, inutile dirti che il timing è tutto sballato, i calcoli teoricamente esatti sono praticamente inefficaci! Non fanno assolutamente quello che devono fare, o almeno lo fanno parecchio male. Mi daresti qualche tua idea sul mio listato? Cosa ne pensi?</p>
<p>******************************************************************************</p>
<p>#include<br />
#include<br />
#define	PIC_CLK 32000000<br />
#include 	&#8220;delay.c&#8221;</p>
<p>// Fuses di configurazione<br />
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp;<br />
		  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);</p>
<p>//Faccio fare i conti al preprocessore invece che al pic, e svolgo tutti calcoli possibili a priori<br />
#define punti 	180//selezionare quanti punti per sinusoide mettere (45/90/180/360)<br />
#define pnt 	punti-1<br />
#define mul 	(360/punti)*(3.14159265359/180)</p>
<p>#define fre		100 //frequenza desiderata<br />
#define fmax	1240 //frequenza massima generata commentando la riga di ritardo nella generazione<br />
#define del		(((1/fre)/punti)-(1/fmax)/punti)/1000000 </p>
<p>//mi calcolo il ritardo da aggiungere ad ogni ciclo in modo da raggiungere la frequenza desiderata<br />
//ho la frequenza massima, mi calcolo il quanto di tempo per ogni ciclo, faccio la differenza<br />
//con il quanto di tempo ideale per ogni ciclo, e lo converto in microsecondi</p>
<p>unsigned char dac[pnt]; //lo inserisco qui per evitare il bug secondo il quale se non dichiarata globale<br />
						//l&#8217;array non può superare gli 80 char<br />
int t=0;</p>
<p>void main(void)<br />
        {<br />
		OSCCON=0b11110000;  //Oscillatore a 32MHz<br />
		TRISA=0b00000100;<br />
		TRISB=0b00000000;<br />
		ANSELA=0b00000100;<br />
		ANSELB=0b00000000;<br />
		DACCON0=0b11100000;</p>
<p>		for(t;t&lt;pnt;t++)<br />
			dac[t]=0b10000+(char)(0b1111*sin(t*mul));</p>
<p>		while(1)<br />
			{<br />
			t=0;<br />
			for(t;t&lt;pnt;t++)<br />
				{DACCON1=dac[t];<br />
				DelayUs(del);<br />
				}<br />
			}</p>
<p>		}</p>
<p>#include<br />
#include<br />
#define	PIC_CLK 32000000<br />
#include 	&#8220;delay.c&#8221;</p>
<p>// Fuses di configurazione<br />
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp;<br />
		  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);</p>
<p>//Faccio fare i conti al preprocessore invece che al pic, e svolgo tutti calcoli possibili a priori<br />
#define punti 	180//selezionare quanti punti per sinusoide mettere (45/90/180/360)<br />
#define pnt 	punti-1<br />
#define mul 	(360/punti)*(3.14159265359/180)</p>
<p>#define fre		100 //frequenza desiderata<br />
#define fmax	1240 //frequenza massima generata commentando la riga di ritardo nella generazione<br />
#define del		(((1/fre)/punti)-(1/fmax)/punti)/1000000 </p>
<p>//mi calcolo il ritardo da aggiungere ad ogni ciclo in modo da raggiungere la frequenza desiderata<br />
//ho la frequenza massima, mi calcolo il quanto di tempo per ogni ciclo, faccio la differenza<br />
//con il quanto di tempo ideale per ogni ciclo, e lo converto in microsecondi</p>
<p>unsigned char dac[pnt]; //lo inserisco qui per evitare il bug secondo il quale se non dichiarata globale<br />
						//l&#8217;array non può superare gli 80 char<br />
int t=0;</p>
<p>void main(void)<br />
        {<br />
		OSCCON=0b11110000;  //Oscillatore a 32MHz<br />
		TRISA=0b00000100;<br />
		TRISB=0b00000000;<br />
		ANSELA=0b00000100;<br />
		ANSELB=0b00000000;<br />
		DACCON0=0b11100000;</p>
<p>		for(t;t&lt;pnt;t++)<br />
			dac[t]=0b10000+(char)(0b1111*sin(t*mul));</p>
<p>		while(1)<br />
			{<br />
			t=0;<br />
			for(t;t&lt;pnt;t++)<br />
				{DACCON1=dac[t];<br />
				DelayUs(del);<br />
				}<br />
			}</p>
<p>		}<br />
******************************************************************************<br />
Ok ci sono parecchie cose da fare, per esempio gestire in automatico il numero di punti ottimale (con 180 non si puo superare il kHz e mezzo), ok bisogna comunque prevenire l&#039;overflow di del quando utilizzato su DelayUs() [Nb. uso le routine di delay di microchipc.com].. ma almeno per grandi linee..perchè non fungeee?</p>
<p>Quando la matematica, approssimata, diventa un opinione.</p>
<p>Ps. debuggando col pickit, controllando i valori con watch expression, inserendo i calcoli nel main, escono valori strani.</p>
<p>Le tue idee a caldo?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6163</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sat, 10 Jul 2010 18:09:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6163</guid>
		<description>Ho capito... Allora abbiamo scoperto un&#039;altro problema di questa versione del PICC... buono a sapersi. Quando hai terminato questo progetto del generatore di onde sinusoidali, fammi un fischio che lo pubblichiamo, così lo provo pure io col mio oscilloscopio e metto le immagini delle onde prodotte. nel frattempo se hai degli appunti sull&#039;argomento su cui cominiciare a lavorare me li puoi anche inviare: gianni at settorezero.com</description>
		<content:encoded><![CDATA[<p>Ho capito&#8230; Allora abbiamo scoperto un&#8217;altro problema di questa versione del PICC&#8230; buono a sapersi. Quando hai terminato questo progetto del generatore di onde sinusoidali, fammi un fischio che lo pubblichiamo, così lo provo pure io col mio oscilloscopio e metto le immagini delle onde prodotte. nel frattempo se hai degli appunti sull&#8217;argomento su cui cominiciare a lavorare me li puoi anche inviare: gianni at settorezero.com</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6158</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Sat, 10 Jul 2010 11:43:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6158</guid>
		<description>L&#039;errore a quanto pare è dovuto al compilatore, la versione aggiornata non presenta tale problema. Nel caso mio, ho preferito non aggiornare il compilatore ma aggirare il problema definendo l&#039;array come globale (mettendolo prima del main) ovviamente la definizione cambia, cambiando anche qualchecosachenonhobencapito (forse la locazione di memoria in cui viene salvato?). Così ho solo un mero limite di memoria, posso aumentare l&#039;array finchè non c&#039;entra fisicamente più.

Ora devo solo vedere come fare in modo da poter dare in pasto direttamente la frequenza desiderata per vedermi generata la sinusoide corrispondente.</description>
		<content:encoded><![CDATA[<p>L&#8217;errore a quanto pare è dovuto al compilatore, la versione aggiornata non presenta tale problema. Nel caso mio, ho preferito non aggiornare il compilatore ma aggirare il problema definendo l&#8217;array come globale (mettendolo prima del main) ovviamente la definizione cambia, cambiando anche qualchecosachenonhobencapito (forse la locazione di memoria in cui viene salvato?). Così ho solo un mero limite di memoria, posso aumentare l&#8217;array finchè non c&#8217;entra fisicamente più.</p>
<p>Ora devo solo vedere come fare in modo da poter dare in pasto direttamente la frequenza desiderata per vedermi generata la sinusoide corrispondente.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6156</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sat, 10 Jul 2010 10:59:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6156</guid>
		<description>Scusa ma non ho capito, hanno aggiornato il PICC per questo errore? O hai cambiato tu la definizione dell&#039;array?</description>
		<content:encoded><![CDATA[<p>Scusa ma non ho capito, hanno aggiornato il PICC per questo errore? O hai cambiato tu la definizione dell&#8217;array?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6154</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Sat, 10 Jul 2010 10:36:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6154</guid>
		<description>http://forum.htsoft.com/all/showflat.php?Cat=0&amp;Board=pic&amp;Number=162962&amp;Searchpage=1&amp;Main=162912&amp;Words=&amp;topic=&amp;Search=true

&quot;Making the array global worked just fine! I&#039;m confused.&quot;...&quot;By changing from auto to static duration, you&#039;ve changed the array&#039;s storage class.&quot;...&quot;Upgraded and error dissapeared. &quot;

Funziona... ma porca..certo che sto hitech è fatto veramente una zoza su certe cose! Con un&#039;upgrade il tizio ha alla fine risolto tutto. Secondo me i bug li hanno inseriti di proposito per farmi uscire pazzo!

Luca</description>
		<content:encoded><![CDATA[<p><a href="http://forum.htsoft.com/all/showflat.php?Cat=0&amp;Board=pic&amp;Number=162962&amp;Searchpage=1&amp;Main=162912&amp;Words=&amp;topic=&amp;Search=true" rel="nofollow">http://forum.htsoft.com/all/showflat.php?Cat=0&amp;Board=pic&amp;Number=162962&amp;Searchpage=1&amp;Main=162912&amp;Words=&amp;topic=&amp;Search=true</a></p>
<p>&#8220;Making the array global worked just fine! I&#8217;m confused.&#8221;&#8230;&#8221;By changing from auto to static duration, you&#8217;ve changed the array&#8217;s storage class.&#8221;&#8230;&#8221;Upgraded and error dissapeared. &#8221;</p>
<p>Funziona&#8230; ma porca..certo che sto hitech è fatto veramente una zoza su certe cose! Con un&#8217;upgrade il tizio ha alla fine risolto tutto. Secondo me i bug li hanno inseriti di proposito per farmi uscire pazzo!</p>
<p>Luca</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6153</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Sat, 10 Jul 2010 10:20:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6153</guid>
		<description>Allora,
punto primo, la versione è &quot;pro&quot; :)

Con array da 90:
******************************************************************************
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.70
Copyright (C) 2009 Microchip Technology Inc.
Serial number: HCPICP-45553 (PRO)
Error   [1250] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\generatoresinusoidale.c; 27. could not find space (89 bytes) for variable _dac
******************************************************************************

Con array da 45:
******************************************************************************
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.70
Copyright (C) 2009 Microchip Technology Inc.
Serial number: HCPICP-45553 (PRO)

Memory Summary:
    Program space        used   61Bh (  1563) of  1000h words   ( 38.2%)
    Data space           used    A9h (   169) of   180h bytes   ( 44.0%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     2h words   ( 50.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

Loaded C:\Users\Luca\Desktop\Programmazione Pic\16F1827\Workspace\generatoresinusoidale.cof.

********** Build successful! **********
******************************************************************************

Come vedi c&#039;è spazio a volontà, facendo delle prove ho visto che il problema è che non riesce a manipolare array da più di 80 char. Ho ottimizzato il codice con più array ora. Ma il problema comunque non cambia. Ora mi chiedo, perchè non riesce a gestire array più grandi? could not find space (89 bytes) for variable _dac? Ma di space ne hai a volontà mio caro! Bah...


Punto secondo:
anche se 8MIPS saranno tanti (relativamente), non è mai un dsPic(con le sue ottimizzazioni circuitali), e calcolare via math.h punto punto il valore, si forma un collo di bottiglia per il quale la max freq generata è 1.6Hz, se invece io effettuo prima tutti i calcoli, dopo farò in modo che l&#039;unico calcolo che devo fare, è l&#039;assegnazione di un valore ad un registro, ed ecco che la freq max sale a 6.5kHz! Ovviamente questo è il valore massimo raggiungibile, con 45 punti per periodo, usarne di meno è troppo distorta, usarne di più ovviamente rallenta!
Ottimizzazione, la quintessenza dell&#039;ingegnere!

Punto terzo:
il passo più lungo della gamba, il dsPic33 è il mio punto d&#039;arrivo, sono un tipo di larghe vedute, c&#039;è prima da solidificare le fondamenta, e poi dopo rompersi la schiena sul dsp con pic, il mio sogno è un&#039;oscilloscopio (con fft e via di lì) fatto con pic display grafico, la teoria c&#039;è tutta (non possiamo lamentarci con questo dell&#039;università, almeno per questo), il problema è la realizzazione, piano piano ci arriveremo.

Spero di non romperti troppo con tutte queste mie richieste, se posso essere utile qualche volta, non esitare a chiedere!
Luca</description>
		<content:encoded><![CDATA[<p>Allora,<br />
punto primo, la versione è &#8220;pro&#8221; :)</p>
<p>Con array da 90:<br />
******************************************************************************<br />
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.70<br />
Copyright (C) 2009 Microchip Technology Inc.<br />
Serial number: HCPICP-45553 (PRO)<br />
Error   [1250] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\generatoresinusoidale.c; 27. could not find space (89 bytes) for variable _dac<br />
******************************************************************************</p>
<p>Con array da 45:<br />
******************************************************************************<br />
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.70<br />
Copyright (C) 2009 Microchip Technology Inc.<br />
Serial number: HCPICP-45553 (PRO)</p>
<p>Memory Summary:<br />
    Program space        used   61Bh (  1563) of  1000h words   ( 38.2%)<br />
    Data space           used    A9h (   169) of   180h bytes   ( 44.0%)<br />
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)<br />
    Configuration bits   used     1h (     1) of     2h words   ( 50.0%)<br />
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)</p>
<p>Loaded C:\Users\Luca\Desktop\Programmazione Pic\16F1827\Workspace\generatoresinusoidale.cof.</p>
<p>********** Build successful! **********<br />
******************************************************************************</p>
<p>Come vedi c&#8217;è spazio a volontà, facendo delle prove ho visto che il problema è che non riesce a manipolare array da più di 80 char. Ho ottimizzato il codice con più array ora. Ma il problema comunque non cambia. Ora mi chiedo, perchè non riesce a gestire array più grandi? could not find space (89 bytes) for variable _dac? Ma di space ne hai a volontà mio caro! Bah&#8230;</p>
<p>Punto secondo:<br />
anche se 8MIPS saranno tanti (relativamente), non è mai un dsPic(con le sue ottimizzazioni circuitali), e calcolare via math.h punto punto il valore, si forma un collo di bottiglia per il quale la max freq generata è 1.6Hz, se invece io effettuo prima tutti i calcoli, dopo farò in modo che l&#8217;unico calcolo che devo fare, è l&#8217;assegnazione di un valore ad un registro, ed ecco che la freq max sale a 6.5kHz! Ovviamente questo è il valore massimo raggiungibile, con 45 punti per periodo, usarne di meno è troppo distorta, usarne di più ovviamente rallenta!<br />
Ottimizzazione, la quintessenza dell&#8217;ingegnere!</p>
<p>Punto terzo:<br />
il passo più lungo della gamba, il dsPic33 è il mio punto d&#8217;arrivo, sono un tipo di larghe vedute, c&#8217;è prima da solidificare le fondamenta, e poi dopo rompersi la schiena sul dsp con pic, il mio sogno è un&#8217;oscilloscopio (con fft e via di lì) fatto con pic display grafico, la teoria c&#8217;è tutta (non possiamo lamentarci con questo dell&#8217;università, almeno per questo), il problema è la realizzazione, piano piano ci arriveremo.</p>
<p>Spero di non romperti troppo con tutte queste mie richieste, se posso essere utile qualche volta, non esitare a chiedere!<br />
Luca</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6142</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Fri, 09 Jul 2010 20:06:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6142</guid>
		<description>Si... Mi sono pure registrato alla Microchip ma non ho mai avuto tempo di mettermi a compilare tutti quei form. La questione della RAM forse è causata dalla versione LITE? Ma mi pare strano, sapevo che limitava unicamente la memoria programma a 2000H words e basta.. non sapevo di un limite sulla RAM. Nel tuo caso non capisco perchè assegni i valori ad un array e poi te lo scansioni per assegnarne i valori ad un registro... Non puoi fare direttamente il ciclo for passando i valori al registro, senza creare un array, che in questo caso non ti serve a nulla?
Ricorda, poi, che se hai bisogno di più ram e di più potenza di calcolo, esistono le serie 24F e dsPIC33... però li c&#039;è da studiare sodo e imparare il C30, e prepararsi ad un altro modo di programmare.</description>
		<content:encoded><![CDATA[<p>Si&#8230; Mi sono pure registrato alla Microchip ma non ho mai avuto tempo di mettermi a compilare tutti quei form. La questione della RAM forse è causata dalla versione LITE? Ma mi pare strano, sapevo che limitava unicamente la memoria programma a 2000H words e basta.. non sapevo di un limite sulla RAM. Nel tuo caso non capisco perchè assegni i valori ad un array e poi te lo scansioni per assegnarne i valori ad un registro&#8230; Non puoi fare direttamente il ciclo for passando i valori al registro, senza creare un array, che in questo caso non ti serve a nulla?<br />
Ricorda, poi, che se hai bisogno di più ram e di più potenza di calcolo, esistono le serie 24F e dsPIC33&#8230; però li c&#8217;è da studiare sodo e imparare il C30, e prepararsi ad un altro modo di programmare.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6136</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Fri, 09 Jul 2010 14:00:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6136</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-6133&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-6133&quot; rel=&quot;nofollow&quot;&gt;Giovanni Bernardo&lt;/a&gt; :&lt;/strong&gt;
          ...magari cerco di procurarmi pure io quel pic e provo quello che hai fatto tu così metto su un articolo a nome tuo se ti fa piacere. 
         &lt;/blockquote&gt;

I samples esistono proprio per questo, dovresti vedere la mia collezione :)

Senti una domanda a bruciapelo, dovendo fare una LUT per memorizzare i valori di una sinusoide, un char valori[360]; non entra nella memoria, ma perchè non ne entrano nemmeno 90? Tutti i valori vanno salvati nella RAM vero? Cioè dove posso stipare tutti i miei dati?

L&#039;idea è questa:

*******************************************************************************
#include 
#include 
#define	PIC_CLK 32000000
#include &quot;delay.c&quot;
#include &quot;lcd.c&quot;

// Fuses di configurazione
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; 
		  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);


void main(void)
        {
		OSCCON = 0b11110000;  //Oscillatore a 32MHz
		TRISA=0b00000100;
		TRISB=0b00000000;
		ANSELA=0b00000100;
		ANSELB=0b00000000;

		DACCON0=0b11100000;
		DACCON1=0b00000000;

		unsigned int t=0;
		unsigned char dac[44]; //le alternative sono 89, 179, 359 ma non c&#039;è spazio dice il compilatore!!


		for(t;t&lt;44;t++)
			{
			dac[t]=0b1111+(char)(0b1111*sin(8*t*((3.14159)/180.0)));
			}

		while(1)
			{
			t=0;
			while(t&lt;44)
				{DACCON1=dac[t];
				t++;
				}
			}
	}
*******************************************************************************

Scartata la eeprom, come faccio a salvare un array di 360 char in un pic16f1827? Sembra che non c&#039;è mai spazio! Possibile? Eppure ho una ram di 380 bytes, e non entra nemmeno un array da 180 nè da 90! Mi puzza sta cosa, cioè non capisco il perchè!

Luca</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-6133"><p>
<strong><a href="#comment-6133" rel="nofollow">Giovanni Bernardo</a> :</strong><br />
          &#8230;magari cerco di procurarmi pure io quel pic e provo quello che hai fatto tu così metto su un articolo a nome tuo se ti fa piacere.
         </p></blockquote>
<p>I samples esistono proprio per questo, dovresti vedere la mia collezione :)</p>
<p>Senti una domanda a bruciapelo, dovendo fare una LUT per memorizzare i valori di una sinusoide, un char valori[360]; non entra nella memoria, ma perchè non ne entrano nemmeno 90? Tutti i valori vanno salvati nella RAM vero? Cioè dove posso stipare tutti i miei dati?</p>
<p>L&#8217;idea è questa:</p>
<p>*******************************************************************************<br />
#include<br />
#include<br />
#define	PIC_CLK 32000000<br />
#include &#8220;delay.c&#8221;<br />
#include &#8220;lcd.c&#8221;</p>
<p>// Fuses di configurazione<br />
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp;<br />
		  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);</p>
<p>void main(void)<br />
        {<br />
		OSCCON = 0b11110000;  //Oscillatore a 32MHz<br />
		TRISA=0b00000100;<br />
		TRISB=0b00000000;<br />
		ANSELA=0b00000100;<br />
		ANSELB=0b00000000;</p>
<p>		DACCON0=0b11100000;<br />
		DACCON1=0b00000000;</p>
<p>		unsigned int t=0;<br />
		unsigned char dac[44]; //le alternative sono 89, 179, 359 ma non c&#8217;è spazio dice il compilatore!!</p>
<p>		for(t;t&lt;44;t++)<br />
			{<br />
			dac[t]=0b1111+(char)(0b1111*sin(8*t*((3.14159)/180.0)));<br />
			}</p>
<p>		while(1)<br />
			{<br />
			t=0;<br />
			while(t&lt;44)<br />
				{DACCON1=dac[t];<br />
				t++;<br />
				}<br />
			}<br />
	}<br />
*******************************************************************************</p>
<p>Scartata la eeprom, come faccio a salvare un array di 360 char in un pic16f1827? Sembra che non c&#039;è mai spazio! Possibile? Eppure ho una ram di 380 bytes, e non entra nemmeno un array da 180 nè da 90! Mi puzza sta cosa, cioè non capisco il perchè!</p>
<p>Luca</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6133</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Fri, 09 Jul 2010 11:25:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6133</guid>
		<description>No no figurati... anzi i contributi come questo li apprezzo, anche perchè non è che ho la possibilità di provare tutti i pic presenti sul mercato e poi questo per me è un hobby e non lo faccio per lavoro... Quando hai messo a punto tutto, magari cerco di procurarmi pure io quel pic e provo quello che hai fatto tu così metto su un articolo a nome tuo se ti fa piacere. Alla fine questo è un modo per condividere tutti insieme le proprie conoscenze, ampliarle e trasmetterle... il sito l&#039;ho messo in piedi per questo... per imparare e discutere</description>
		<content:encoded><![CDATA[<p>No no figurati&#8230; anzi i contributi come questo li apprezzo, anche perchè non è che ho la possibilità di provare tutti i pic presenti sul mercato e poi questo per me è un hobby e non lo faccio per lavoro&#8230; Quando hai messo a punto tutto, magari cerco di procurarmi pure io quel pic e provo quello che hai fatto tu così metto su un articolo a nome tuo se ti fa piacere. Alla fine questo è un modo per condividere tutti insieme le proprie conoscenze, ampliarle e trasmetterle&#8230; il sito l&#8217;ho messo in piedi per questo&#8230; per imparare e discutere</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6131</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Fri, 09 Jul 2010 09:38:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6131</guid>
		<description>A parte che io effettuavo prima una lettura, poi un&#039;operazione ed infine una scrittura, comunque penso che il problema resti lo stesso. Il problema era: il pickit non programmava, ed il programma non partiva. 
Beh, diciamo che ho cambiato quasi nulla alle fine, a parte sostituire tutti gli mnemonici che ovviamente sono diversi. La struttura è un pò diversa nel 1827, per esempio ha due registri di indirizzamento due di dati. Diciamo che si potrebbe ottimizzare, perchè a quanto ho capito, il pic è già capace da solo di scrivere su più byte contemporaneamente. Non finisce mai di stupirmi questo nuovissimo pic, ma la cosa più gratificante è il DAC integrato (purtroppo solo a 5 bit) che mi sta fungendo da generatore sinusoidale =) (peccato non avere più memoria\più velocità, sai com&#039;è la libreria math.h è un pò pesantuccia per 8MIPS e nemmeno optare per una LUT a 360 occorrenze è cosa perchè troppo grande per la ram interna...ma 1.6Hz sn troppo pochi per me, ed oggi vedrò di ottimizzare un pò. Sai com&#039;è pensavo di salvare tutto nell&#039;eeprom, questo era la mia idea iniziale, ma comunque sarebbe stata un&#039;idea svantaggiosa a causa dei lenti tempi di lettura.
Ps.è astio quello che leggo, o semplicemente la tua pazienza che con me è andata a farsi friggere? &gt;.&lt; heheh</description>
		<content:encoded><![CDATA[<p>A parte che io effettuavo prima una lettura, poi un&#8217;operazione ed infine una scrittura, comunque penso che il problema resti lo stesso. Il problema era: il pickit non programmava, ed il programma non partiva.<br />
Beh, diciamo che ho cambiato quasi nulla alle fine, a parte sostituire tutti gli mnemonici che ovviamente sono diversi. La struttura è un pò diversa nel 1827, per esempio ha due registri di indirizzamento due di dati. Diciamo che si potrebbe ottimizzare, perchè a quanto ho capito, il pic è già capace da solo di scrivere su più byte contemporaneamente. Non finisce mai di stupirmi questo nuovissimo pic, ma la cosa più gratificante è il DAC integrato (purtroppo solo a 5 bit) che mi sta fungendo da generatore sinusoidale =) (peccato non avere più memoria\più velocità, sai com&#8217;è la libreria math.h è un pò pesantuccia per 8MIPS e nemmeno optare per una LUT a 360 occorrenze è cosa perchè troppo grande per la ram interna&#8230;ma 1.6Hz sn troppo pochi per me, ed oggi vedrò di ottimizzare un pò. Sai com&#8217;è pensavo di salvare tutto nell&#8217;eeprom, questo era la mia idea iniziale, ma comunque sarebbe stata un&#8217;idea svantaggiosa a causa dei lenti tempi di lettura.<br />
Ps.è astio quello che leggo, o semplicemente la tua pazienza che con me è andata a farsi friggere? &gt;.&lt; heheh</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6110</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Wed, 07 Jul 2010 19:33:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6110</guid>
		<description>Io continuo a non capire qual è il problema... La lettura della eeprom comunque non la puoi effettuare appena subito dopo una scrittura, questo mi pare di averlo specificato, devi far passare del tempo, adesso non ricordo quanti millisecondi. Se provi a leggere l&#039;eeprom subito dopo una scrittura non ottieni il valore reale. E poi non capisco cos&#039;ha la tua libreria di diverso.</description>
		<content:encoded><![CDATA[<p>Io continuo a non capire qual è il problema&#8230; La lettura della eeprom comunque non la puoi effettuare appena subito dopo una scrittura, questo mi pare di averlo specificato, devi far passare del tempo, adesso non ricordo quanti millisecondi. Se provi a leggere l&#8217;eeprom subito dopo una scrittura non ottieni il valore reale. E poi non capisco cos&#8217;ha la tua libreria di diverso.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6098</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Wed, 07 Jul 2010 08:29:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6098</guid>
		<description>PROBLEMA RISOLTO:

Ecco il codice funzionante:
************************************************************************************
#include 
#include 
#define	PIC_CLK 32000000
#include &quot;delay.c&quot;
#include &quot;lcd.c&quot;
#include &quot;e2prom.c&quot;

// Fuses di configurazione
__CONFIG (FOSC_INTOSC &amp; WDTE_NSLEEP &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; 
		 			  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);

__EEPROM_DATA(0,0,0,0,0,0,0,0);

// funzione principale, eseguita all&#039;avvio del picmicro
void main(void)
	{
	OSCCON = 0b11110000;  //Oscillatore a 32MHz
	ANSELA=0;
	TRISA=0;
	ANSELB=0;
	TRISB=0;

    int cnt=eei_read_byte(0);
	cnt++;

	LCD_INIT();
	DelayMs(100);
	LCD_CLEAR();
	LCD_GOTO(1,1); 
	LCD_PUTS(&quot;Counter: &quot;);
	LCD_PUTUN(cnt);
	LCD_GOTO(2,1); //
	LCD_PUTS(&quot;    S  a  S   !&quot;);

	eei_write_byte(cnt,0);
	SLEEP();
	}
*****************************************************************************

Ho risolto il tutto mettendo la scrittura della eeprom distante dalla lettura; sinceramente non capisco come mai non funzionasse, ma sopratutto la cosa strana è: perchè un problema del genere viene fuori dal momento che programmo? Nel senso: il problema ce l&#039;ho o nel momento che compilo, o a runtime; la programmazione non si limita a flashare il pic, salvando l&#039;hex nella memoria? Perchè mai mi ha dato questo errore? Bah...

Comunque ora vedo di ultimare la libreria, casomai ti servisse posso inviartela così la puoi pubblicare.
Grazie del cordialissimo supporto, Luca</description>
		<content:encoded><![CDATA[<p>PROBLEMA RISOLTO:</p>
<p>Ecco il codice funzionante:<br />
************************************************************************************<br />
#include<br />
#include<br />
#define	PIC_CLK 32000000<br />
#include &#8220;delay.c&#8221;<br />
#include &#8220;lcd.c&#8221;<br />
#include &#8220;e2prom.c&#8221;</p>
<p>// Fuses di configurazione<br />
__CONFIG (FOSC_INTOSC &amp; WDTE_NSLEEP &amp; PWRTE_OFF &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp;<br />
		 			  FCMEN_OFF &amp; WRT_ALL &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);</p>
<p>__EEPROM_DATA(0,0,0,0,0,0,0,0);</p>
<p>// funzione principale, eseguita all&#8217;avvio del picmicro<br />
void main(void)<br />
	{<br />
	OSCCON = 0b11110000;  //Oscillatore a 32MHz<br />
	ANSELA=0;<br />
	TRISA=0;<br />
	ANSELB=0;<br />
	TRISB=0;</p>
<p>    int cnt=eei_read_byte(0);<br />
	cnt++;</p>
<p>	LCD_INIT();<br />
	DelayMs(100);<br />
	LCD_CLEAR();<br />
	LCD_GOTO(1,1);<br />
	LCD_PUTS(&#8220;Counter: &#8220;);<br />
	LCD_PUTUN(cnt);<br />
	LCD_GOTO(2,1); //<br />
	LCD_PUTS(&#8221;    S  a  S   !&#8221;);</p>
<p>	eei_write_byte(cnt,0);<br />
	SLEEP();<br />
	}<br />
*****************************************************************************</p>
<p>Ho risolto il tutto mettendo la scrittura della eeprom distante dalla lettura; sinceramente non capisco come mai non funzionasse, ma sopratutto la cosa strana è: perchè un problema del genere viene fuori dal momento che programmo? Nel senso: il problema ce l&#8217;ho o nel momento che compilo, o a runtime; la programmazione non si limita a flashare il pic, salvando l&#8217;hex nella memoria? Perchè mai mi ha dato questo errore? Bah&#8230;</p>
<p>Comunque ora vedo di ultimare la libreria, casomai ti servisse posso inviartela così la puoi pubblicare.<br />
Grazie del cordialissimo supporto, Luca</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6097</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Wed, 07 Jul 2010 07:57:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6097</guid>
		<description>Allora il fatto delle __CONFIG, ho fatto delle prove, la prima cosa che mi è venuta in mente è __CONFIG1(...); __CONFIG2(...); dal momento che dall&#039;include dell&#039;hitech-c leggo// Config Register: CONFIG1...e // Config Register: CONFIG2 .
Ma ciò non funge, il compilatore mi da un errore del tipo: 
*****************************************************************************
Codice:
9---  __CONFIG1(FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_ON &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; FCMEN_OFF);
10--  __CONFIG2(WRT_OFF &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);
*****************************************************************************
Errore:
Executing: &quot;C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe&quot; --pass1 &quot;C:\Users\Luca\Desktop\Programmazione Pic\16F1827\primolcd.c&quot; -q --chip=16F1827 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist &quot;--errformat=Error   [%n] %f; %l.%c %s&quot; &quot;--msgformat=Advisory[%n] %s&quot; &quot;--warnformat=Warning [%n] %f; %l.%c %s&quot; 
Error   [194] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\primolcd.c; 9.11 &quot;)&quot; expected
Error   [194] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\primolcd.c; 10.11 &quot;)&quot; expected

********** Build failed! **********
*****************************************************************************

Se levo i numeri 1 e 2 affianco a __CONFIG le cose funzionano, e funzionano allo stesso modo se uso una sola riga.

Ritornando al problema: cancello la eeprom al primo byte, il programma parte, legge il valore all&#039;indirizzo 1, lo aumenta di un unità, lo salva nell&#039;indirizzo 1, e stampa sull&#039;lcd counter: valore, insomma per vedere quante volte è andato in esecuzione in programma.

Il problema sono riuscito ad isolarlo: funge tutto alla perfezione finchè non utilizzo la riga : 
eei_write_byte(cnt,1);
sembra sia questa a creare il problema, perchè commentandola fila tutto liscio come l&#039;olio.

Il programma non dovrebbe nemmeno partire, a detta del pickit la programmazione dovrebbe esser fallita, eppure il programma parte, ogni 2 secondi e mezzo la cifra aumenta da sola. se premo il tasto del reset non aumenta subito dopo (come dovrebbe, dal momento che il programma dovrebbe ripartire dall&#039;inizio), ma semplicemente attende sempre quei due secondi  e mezzo e và avanti con la cifra. Ti posso assicurare che in fin dei conti l&#039;eeprom la scrive dal momento che se tolgo l&#039;alimentazione e la rimetto il numero stampato subito dopo l&#039;accensione è quello che mi compariva qualche istante prima  di togliere l&#039;alimentazione.

Un&#039;ultima cosa strana è che per una frazione di secondo, prima di cambiare cifra, sull&#039;lcd compaiono altri caratteri, ad es:

Counter: 227            questo a  0sec
S   a    S    !

Cou ter: 2u7             questo a +200ms
S    a     S  !

Counter: 228            questo da 500ms a 2,5s
S   a      S   !

In loop, questo è il comportamento, in automatico.
Che stranezza, eppure ho seguito il datasheet nel modificare la libreria, la cosa troppo strana è quell&#039;errore, non capisco da dove salta fuori.</description>
		<content:encoded><![CDATA[<p>Allora il fatto delle __CONFIG, ho fatto delle prove, la prima cosa che mi è venuta in mente è __CONFIG1(&#8230;); __CONFIG2(&#8230;); dal momento che dall&#8217;include dell&#8217;hitech-c leggo// Config Register: CONFIG1&#8230;e // Config Register: CONFIG2 .<br />
Ma ciò non funge, il compilatore mi da un errore del tipo:<br />
*****************************************************************************<br />
Codice:<br />
9&#8212;  __CONFIG1(FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_ON &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; FCMEN_OFF);<br />
10&#8211;  __CONFIG2(WRT_OFF &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);<br />
*****************************************************************************<br />
Errore:<br />
Executing: &#8220;C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe&#8221; &#8211;pass1 &#8220;C:\Users\Luca\Desktop\Programmazione Pic\16F1827\primolcd.c&#8221; -q &#8211;chip=16F1827 -P &#8211;runtime=default &#8211;opt=default -D__DEBUG=1 -g &#8211;asmlist &#8220;&#8211;errformat=Error   [%n] %f; %l.%c %s&#8221; &#8220;&#8211;msgformat=Advisory[%n] %s&#8221; &#8220;&#8211;warnformat=Warning [%n] %f; %l.%c %s&#8221;<br />
Error   [194] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\primolcd.c; 9.11 &#8220;)&#8221; expected<br />
Error   [194] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\primolcd.c; 10.11 &#8220;)&#8221; expected</p>
<p>********** Build failed! **********<br />
*****************************************************************************</p>
<p>Se levo i numeri 1 e 2 affianco a __CONFIG le cose funzionano, e funzionano allo stesso modo se uso una sola riga.</p>
<p>Ritornando al problema: cancello la eeprom al primo byte, il programma parte, legge il valore all&#8217;indirizzo 1, lo aumenta di un unità, lo salva nell&#8217;indirizzo 1, e stampa sull&#8217;lcd counter: valore, insomma per vedere quante volte è andato in esecuzione in programma.</p>
<p>Il problema sono riuscito ad isolarlo: funge tutto alla perfezione finchè non utilizzo la riga :<br />
eei_write_byte(cnt,1);<br />
sembra sia questa a creare il problema, perchè commentandola fila tutto liscio come l&#8217;olio.</p>
<p>Il programma non dovrebbe nemmeno partire, a detta del pickit la programmazione dovrebbe esser fallita, eppure il programma parte, ogni 2 secondi e mezzo la cifra aumenta da sola. se premo il tasto del reset non aumenta subito dopo (come dovrebbe, dal momento che il programma dovrebbe ripartire dall&#8217;inizio), ma semplicemente attende sempre quei due secondi  e mezzo e và avanti con la cifra. Ti posso assicurare che in fin dei conti l&#8217;eeprom la scrive dal momento che se tolgo l&#8217;alimentazione e la rimetto il numero stampato subito dopo l&#8217;accensione è quello che mi compariva qualche istante prima  di togliere l&#8217;alimentazione.</p>
<p>Un&#8217;ultima cosa strana è che per una frazione di secondo, prima di cambiare cifra, sull&#8217;lcd compaiono altri caratteri, ad es:</p>
<p>Counter: 227            questo a  0sec<br />
S   a    S    !</p>
<p>Cou ter: 2u7             questo a +200ms<br />
S    a     S  !</p>
<p>Counter: 228            questo da 500ms a 2,5s<br />
S   a      S   !</p>
<p>In loop, questo è il comportamento, in automatico.<br />
Che stranezza, eppure ho seguito il datasheet nel modificare la libreria, la cosa troppo strana è quell&#8217;errore, non capisco da dove salta fuori.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6094</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Tue, 06 Jul 2010 21:31:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6094</guid>
		<description>A parte che non ho ben capito qual è il problema...
Quel pic ha 2 word di configurazione e, per quanto ne so io, il sistema per settarle non è mettere tutti i parametri nella stessa macro config, ma usare due __config di seguito con i settaggi per la prima e per la seconda word. Poi... Non conosco questo pic, mi è nuovo e vedo che ha davvero un sacco di funzioni, tra cui addirittura la rimappatura delle periferiche sui pin, funzione che era fino a poco tempo fa un&#039;esclusiva delle serie superiori.... Però!
In parole povere: vuoi far memorizzare un valore nell&#039;eeprom, all&#039;accensione te lo leggi, lo aumenti di una unità e lo mostri a display. 
Tralasciando l&#039;errore del pickit, il programma come si comporta di preciso?</description>
		<content:encoded><![CDATA[<p>A parte che non ho ben capito qual è il problema&#8230;<br />
Quel pic ha 2 word di configurazione e, per quanto ne so io, il sistema per settarle non è mettere tutti i parametri nella stessa macro config, ma usare due __config di seguito con i settaggi per la prima e per la seconda word. Poi&#8230; Non conosco questo pic, mi è nuovo e vedo che ha davvero un sacco di funzioni, tra cui addirittura la rimappatura delle periferiche sui pin, funzione che era fino a poco tempo fa un&#8217;esclusiva delle serie superiori&#8230;. Però!<br />
In parole povere: vuoi far memorizzare un valore nell&#8217;eeprom, all&#8217;accensione te lo leggi, lo aumenti di una unità e lo mostri a display.<br />
Tralasciando l&#8217;errore del pickit, il programma come si comporta di preciso?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-6093</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Tue, 06 Jul 2010 21:16:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-6093</guid>
		<description>Caro Giovanni,
sto cercando di adattare la tua libreria al pic16f1827. le cose sono un bel po differenti, ma per grandi linee la frittata è sempre la stessa.

Premettendo che il pickit3 mi spara questo errore:
*****************************************************************************
Programming...
The following memory regions failed to program correctly:
EEData Memory
Address: 00000001 Expected Value: 00000000 Received Value: 00000001
Programming failed
*****************************************************************************

Pur programmando lo stesso la periferica, il semplicemente aggiunge un unità ad un valore memorizzato nella posizione 1 dell&#039;eeprom ad ogni riavvio e lo stampa sull&#039;lcd; vedo che sull&#039;lcd visualizza la cifra, ma aumenta automaticamente (wtd disabilitato!!) e sembra insensibile ai reset.

La libreria è questa (ridotta solo alle operazioni su un byte):
*****************************************************************************
// legge un BYTE (8bit)  dall&#039;indirizzo specificato in &quot;address&quot;
unsigned char eei_read_byte(unsigned char address)
	{
	EEADRL=address; // indirizzo da cui leggere
	EEPGD=0; // accesso alla memoria eeprom
	CFGS=0;
	RD=1; // avvio la lettura
	// il valore contenuto in EEDATA è disponibile dal prossimo ciclo
	// se effettuo un return EEDATA, non ottengo nulla
	char EEVALUE;
	EEVALUE=EEDATL;
	return EEVALUE;
	}

// scrive un BYTE (8 bit) (valore &quot;data&quot;) nell&#039;indirizzo specificato in &quot;address&quot;
void eei_write_byte(unsigned char data, unsigned char address)
	{
	EEADRL=address; // indirizzo in cui scrivere
	EEDATA=data; // dati da scrivere
	EEPGD=0; // accesso alla memoria eeprom
	WREN=1; // abilito la scrittura                            
	// Controllo se sono attivi gli interrupt e mi memorizzo la condizione
	static bit temp=0;	
	if (GIE) 
		{
		temp=1;	
		GIE=0; // disabilito gli interrupt
		}
	// Queste due istruzioni che seguono sono richieste (vedi datasheet) per avviare la scrittura
	EECON2=0x55;
	EECON2=0xAA;
	WR=1; // avvio un ciclo di scrittura
	while(!EEIF); // attendo che la scrittura sia completa
	WREN=0; // disabilito la scrittura sull&#039;eeprom
	EEIF=0; // resetto il flag di scrittura completa
	// reimposto gli interrupt allo stato in cui si trovavano
	if (temp)
		{
		GIE=1;
		}
	}

*****************************************************************************
#include 
#include 
#define	PIC_CLK 32000000
#include &quot;delay.c&quot;
#include &quot;lcd.c&quot;
#include &quot;e2prom.c&quot;

// Fuses di configurazione
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_ON &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp; 
		  FCMEN_OFF &amp; WRT_OFF &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);

__EEPROM_DATA(0,0,0,0,0,0,0,0);

// funzione principale, eseguita all&#039;avvio del picmicro
void main(void)
	{
	OSCCON = 0b11110000;  //Oscillatore a 32MHz
	ANSELA=0;
	TRISA=0;
	ANSELB=0;
	TRISB=0;

	int cnt=eei_read_byte(1);
	cnt++;
	eei_write_byte(cnt,1);

	LCD_INIT();
	DelayMs(100);
	LCD_CLEAR();
	LCD_GOTO(1,1); 
	LCD_PUTS(&quot;Counter: &quot;);
	LCD_PUTUN(cnt);
	LCD_GOTO(2,1); //
	LCD_PUTS(&quot;    S  a  S   !&quot;);
	SLEEP();

	}
*****************************************************************************
Qualche lume? (Prometto che stavolta non manderà tutto all&#039;aria, devo assolutamente scrivermi questa libreria, anche se per le operazioni su 16 bit le cose cambiano parecchio dal momento che ho un&#039;indirizzamento su 10 bit e tante altre cosucce che mi incasineranno le cose)

Grazie,
Luca</description>
		<content:encoded><![CDATA[<p>Caro Giovanni,<br />
sto cercando di adattare la tua libreria al pic16f1827. le cose sono un bel po differenti, ma per grandi linee la frittata è sempre la stessa.</p>
<p>Premettendo che il pickit3 mi spara questo errore:<br />
*****************************************************************************<br />
Programming&#8230;<br />
The following memory regions failed to program correctly:<br />
EEData Memory<br />
Address: 00000001 Expected Value: 00000000 Received Value: 00000001<br />
Programming failed<br />
*****************************************************************************</p>
<p>Pur programmando lo stesso la periferica, il semplicemente aggiunge un unità ad un valore memorizzato nella posizione 1 dell&#8217;eeprom ad ogni riavvio e lo stampa sull&#8217;lcd; vedo che sull&#8217;lcd visualizza la cifra, ma aumenta automaticamente (wtd disabilitato!!) e sembra insensibile ai reset.</p>
<p>La libreria è questa (ridotta solo alle operazioni su un byte):<br />
*****************************************************************************<br />
// legge un BYTE (8bit)  dall&#8217;indirizzo specificato in &#8220;address&#8221;<br />
unsigned char eei_read_byte(unsigned char address)<br />
	{<br />
	EEADRL=address; // indirizzo da cui leggere<br />
	EEPGD=0; // accesso alla memoria eeprom<br />
	CFGS=0;<br />
	RD=1; // avvio la lettura<br />
	// il valore contenuto in EEDATA è disponibile dal prossimo ciclo<br />
	// se effettuo un return EEDATA, non ottengo nulla<br />
	char EEVALUE;<br />
	EEVALUE=EEDATL;<br />
	return EEVALUE;<br />
	}</p>
<p>// scrive un BYTE (8 bit) (valore &#8220;data&#8221;) nell&#8217;indirizzo specificato in &#8220;address&#8221;<br />
void eei_write_byte(unsigned char data, unsigned char address)<br />
	{<br />
	EEADRL=address; // indirizzo in cui scrivere<br />
	EEDATA=data; // dati da scrivere<br />
	EEPGD=0; // accesso alla memoria eeprom<br />
	WREN=1; // abilito la scrittura<br />
	// Controllo se sono attivi gli interrupt e mi memorizzo la condizione<br />
	static bit temp=0;<br />
	if (GIE)<br />
		{<br />
		temp=1;<br />
		GIE=0; // disabilito gli interrupt<br />
		}<br />
	// Queste due istruzioni che seguono sono richieste (vedi datasheet) per avviare la scrittura<br />
	EECON2=0&#215;55;<br />
	EECON2=0xAA;<br />
	WR=1; // avvio un ciclo di scrittura<br />
	while(!EEIF); // attendo che la scrittura sia completa<br />
	WREN=0; // disabilito la scrittura sull&#8217;eeprom<br />
	EEIF=0; // resetto il flag di scrittura completa<br />
	// reimposto gli interrupt allo stato in cui si trovavano<br />
	if (temp)<br />
		{<br />
		GIE=1;<br />
		}<br />
	}</p>
<p>*****************************************************************************<br />
#include<br />
#include<br />
#define	PIC_CLK 32000000<br />
#include &#8220;delay.c&#8221;<br />
#include &#8220;lcd.c&#8221;<br />
#include &#8220;e2prom.c&#8221;</p>
<p>// Fuses di configurazione<br />
__CONFIG (FOSC_INTOSC &amp; WDTE_OFF &amp; PWRTE_ON &amp; MCLRE_ON &amp; CP_OFF &amp; CPD_OFF &amp; BOREN_OFF &amp; CLKOUTEN_ON &amp; IESO_OFF &amp;<br />
		  FCMEN_OFF &amp; WRT_OFF &amp; VCAPEN_OFF &amp; PLLEN_OFF &amp; STVREN_OFF &amp; BORV_19 &amp; DEBUG_ON &amp; LVP_OFF);</p>
<p>__EEPROM_DATA(0,0,0,0,0,0,0,0);</p>
<p>// funzione principale, eseguita all&#8217;avvio del picmicro<br />
void main(void)<br />
	{<br />
	OSCCON = 0b11110000;  //Oscillatore a 32MHz<br />
	ANSELA=0;<br />
	TRISA=0;<br />
	ANSELB=0;<br />
	TRISB=0;</p>
<p>	int cnt=eei_read_byte(1);<br />
	cnt++;<br />
	eei_write_byte(cnt,1);</p>
<p>	LCD_INIT();<br />
	DelayMs(100);<br />
	LCD_CLEAR();<br />
	LCD_GOTO(1,1);<br />
	LCD_PUTS(&#8220;Counter: &#8220;);<br />
	LCD_PUTUN(cnt);<br />
	LCD_GOTO(2,1); //<br />
	LCD_PUTS(&#8221;    S  a  S   !&#8221;);<br />
	SLEEP();</p>
<p>	}<br />
*****************************************************************************<br />
Qualche lume? (Prometto che stavolta non manderà tutto all&#8217;aria, devo assolutamente scrivermi questa libreria, anche se per le operazioni su 16 bit le cose cambiano parecchio dal momento che ho un&#8217;indirizzamento su 10 bit e tante altre cosucce che mi incasineranno le cose)</p>
<p>Grazie,<br />
Luca</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4493</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Tue, 13 Apr 2010 06:07:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4493</guid>
		<description>Ho letto meglio il datasheet di un pic preso ad esempio (il 16F628A). Si legge a pagina 3:
&lt;em&gt;• High-Endurance Flash/EEPROM cell:
- 100,000 write Flash endurance
- 1,000,000 write EEPROM endurance
- 40 year data retention&lt;/em&gt;

Quindi come dicevo l&#039;eeprom la puoi riscrivere un milione di volte (ovviamente lo sarà sicuramente qualcosa di più dal momento che su questi dati si dichiara sempre un valore di sicurezza per stare tranquilli), mentre la memoria programma è più limitata (100mila volte).
Un&#039;eeprom esterna (ho preso ad esempio la 24LC512) porta scritto:
&lt;em&gt;More than 1 Million Erase/Write Cycles&lt;/em&gt;
Quindi il parametro è sempre 1milione ma qui c&#039;è scritto &quot;più di&quot;, e comunque se uno ci deve scrivere di continuo, come già detto, è meglio usarne una esterna almeno non si compromette il chip principale. E poi penso che questo parametro sia &quot;per cella&quot; (ma non è specificato quindi non so fino a che punto possa essere vera tale affermazione)</description>
		<content:encoded><![CDATA[<p>Ho letto meglio il datasheet di un pic preso ad esempio (il 16F628A). Si legge a pagina 3:<br />
<em>• High-Endurance Flash/EEPROM cell:<br />
- 100,000 write Flash endurance<br />
- 1,000,000 write EEPROM endurance<br />
- 40 year data retention</em></p>
<p>Quindi come dicevo l&#8217;eeprom la puoi riscrivere un milione di volte (ovviamente lo sarà sicuramente qualcosa di più dal momento che su questi dati si dichiara sempre un valore di sicurezza per stare tranquilli), mentre la memoria programma è più limitata (100mila volte).<br />
Un&#8217;eeprom esterna (ho preso ad esempio la 24LC512) porta scritto:<br />
<em>More than 1 Million Erase/Write Cycles</em><br />
Quindi il parametro è sempre 1milione ma qui c&#8217;è scritto &#8220;più di&#8221;, e comunque se uno ci deve scrivere di continuo, come già detto, è meglio usarne una esterna almeno non si compromette il chip principale. E poi penso che questo parametro sia &#8220;per cella&#8221; (ma non è specificato quindi non so fino a che punto possa essere vera tale affermazione)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4472</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sun, 11 Apr 2010 19:35:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4472</guid>
		<description>Beh a dirti il vero non mi sono mai posto tale problema per cui adesso su due piedi non ti saprei dire. Generalmente opero sempre su interi. Quando mi servono valori con virgola moltiplico per 10, 100, 1000 per riportarmi a un intero e in fase di visualizzazione (tipo su un display) faccio la divisione intera e il resto della divisione.</description>
		<content:encoded><![CDATA[<p>Beh a dirti il vero non mi sono mai posto tale problema per cui adesso su due piedi non ti saprei dire. Generalmente opero sempre su interi. Quando mi servono valori con virgola moltiplico per 10, 100, 1000 per riportarmi a un intero e in fase di visualizzazione (tipo su un display) faccio la divisione intera e il resto della divisione.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: MayTs</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4471</link>
		<dc:creator>MayTs</dc:creator>
		<pubDate>Sun, 11 Apr 2010 19:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4471</guid>
		<description>Grazie mille per l&#039;aiuto, inoltre, per poter salvare in eeprom valori di tipo float(quindi a virgola mobile)?</description>
		<content:encoded><![CDATA[<p>Grazie mille per l&#8217;aiuto, inoltre, per poter salvare in eeprom valori di tipo float(quindi a virgola mobile)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4470</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sun, 11 Apr 2010 19:15:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4470</guid>
		<description>Così direi che va decisamente meglio. Magari per riuscire ad effettuare il salvataggio è sufficiente soltanto un grosso condensatore con un diodo per non far andare la corrente al resto del circuito (è un&#039;idea, non so se può funzionare). Ovviamente un I/O dovrà ricevere alimentazione fissa, appena l&#039;alimentazione manca effettua il salvataggio</description>
		<content:encoded><![CDATA[<p>Così direi che va decisamente meglio. Magari per riuscire ad effettuare il salvataggio è sufficiente soltanto un grosso condensatore con un diodo per non far andare la corrente al resto del circuito (è un&#8217;idea, non so se può funzionare). Ovviamente un I/O dovrà ricevere alimentazione fissa, appena l&#8217;alimentazione manca effettua il salvataggio</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: MayTs</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4469</link>
		<dc:creator>MayTs</dc:creator>
		<pubDate>Sun, 11 Apr 2010 19:04:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4469</guid>
		<description>facendo un rapido calcolo, se la eeprom ha un limite di 1.000.000 di scritture riuscirei a fare circa 90.000 km, prima di far saltare la cella....
Per l&#039;uso che devo farne direi che è accettabile, ma credo che terrò i dati in Ram durante l&#039;uso del tachimetro(quindi in alimentazione costante) e li salverò in eeprom solo quando l&#039;alimentazione principale verrà tolta(ovviamente il circuitò avrà una seconda fonte di alimentazione per permettere esclusivamente il salvataggio dei dati in eeprom).
In questo modo dovrei riuscire ad eludere tale problema, giusto?</description>
		<content:encoded><![CDATA[<p>facendo un rapido calcolo, se la eeprom ha un limite di 1.000.000 di scritture riuscirei a fare circa 90.000 km, prima di far saltare la cella&#8230;.<br />
Per l&#8217;uso che devo farne direi che è accettabile, ma credo che terrò i dati in Ram durante l&#8217;uso del tachimetro(quindi in alimentazione costante) e li salverò in eeprom solo quando l&#8217;alimentazione principale verrà tolta(ovviamente il circuitò avrà una seconda fonte di alimentazione per permettere esclusivamente il salvataggio dei dati in eeprom).<br />
In questo modo dovrei riuscire ad eludere tale problema, giusto?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4468</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sun, 11 Apr 2010 18:51:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4468</guid>
		<description>Se non erro circa un milione di volte ma non ne sono sicuro, ci dovrebbe star scritto sul datasheet. Usa un &#039;eeprom esterna, almeno se si guasta puoi sostituire solo quella e non tutto il circuito. Alcune auto ad esempio memorizzano tutti questi dati proprio sulle 24Cxx. Ma poi perchè i parziali ogni 100 metri? Cosi si che la cella di memoria salta subito.</description>
		<content:encoded><![CDATA[<p>Se non erro circa un milione di volte ma non ne sono sicuro, ci dovrebbe star scritto sul datasheet. Usa un &#8216;eeprom esterna, almeno se si guasta puoi sostituire solo quella e non tutto il circuito. Alcune auto ad esempio memorizzano tutti questi dati proprio sulle 24Cxx. Ma poi perchè i parziali ogni 100 metri? Cosi si che la cella di memoria salta subito.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: MayTs</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4466</link>
		<dc:creator>MayTs</dc:creator>
		<pubDate>Sun, 11 Apr 2010 18:26:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4466</guid>
		<description>Ottima guida veramente! 
un piccolo quesito:

Sto realizzando un tachimetro e dovrei quindi memorizzare in eprom sia i km parziali che i km totali(i totali ogni km, i parziali ogni 100 metri). Essendo quindi la memoria eeprom riscrivibile solo limitate volte(quante volte?), come aggiro il problema?</description>
		<content:encoded><![CDATA[<p>Ottima guida veramente!<br />
un piccolo quesito:</p>
<p>Sto realizzando un tachimetro e dovrei quindi memorizzare in eprom sia i km parziali che i km totali(i totali ogni km, i parziali ogni 100 metri). Essendo quindi la memoria eeprom riscrivibile solo limitate volte(quante volte?), come aggiro il problema?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Giovanni Bernardo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4111</link>
		<dc:creator>Giovanni Bernardo</dc:creator>
		<pubDate>Sat, 13 Mar 2010 12:42:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4111</guid>
		<description>Il 16f628A non ha il bit EEPGD perchè non può riscriversi la memoria programma.  Come già detto il bit EEPGD serve per selezionare la scrittura su memoria programma o su memoria dati. Non avendo il 16F628 la possibilità di scrivere la memoria programma tale bit è stato eliminato perchè non avrebbe ragione di esistere potendo solo scrivere la memoria dati. Basta commentare la riga di EEPGD.

Riguardo alla piccola chicca.... Che cosa sarebbe? Non ci vedo nulla di particolare</description>
		<content:encoded><![CDATA[<p>Il 16f628A non ha il bit EEPGD perchè non può riscriversi la memoria programma.  Come già detto il bit EEPGD serve per selezionare la scrittura su memoria programma o su memoria dati. Non avendo il 16F628 la possibilità di scrivere la memoria programma tale bit è stato eliminato perchè non avrebbe ragione di esistere potendo solo scrivere la memoria dati. Basta commentare la riga di EEPGD.</p>
<p>Riguardo alla piccola chicca&#8230;. Che cosa sarebbe? Non ci vedo nulla di particolare</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: Luca</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-4109</link>
		<dc:creator>Luca</dc:creator>
		<pubDate>Sat, 13 Mar 2010 10:51:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-4109</guid>
		<description>Tutto alla perfezione, come sempre, volevo solo aggiungere una postilla. Il 628a non ha il bit EEPGD, quindi a meno che non si risolva differentemente, se da un lato non c&#039;è bisogno nelle routine di scrittura\lettura tale bit, dall&#039;altro in una prima occhiata sembrerebbe impossibile scrivere sulla memoria del programma.

L&#039;unico problema riscontrato, usando un willem prog 5.0 è la lettura della eeprom dal computer, per permettere la lettura della eeprom a posteriori, è necessario settare su ON il flag &quot;CP EEPROM&quot; (anche se sembrerebbe li contrario). Talvolta, ovvero quasi sempre, il programmatore non riesce a leggere i primi 4 byte della epprom. Quindi ho cercato di evitare di usarli.

Piccola chicca: __EEPROM_DATA(&quot;C&quot;,&quot;o&quot;,&quot;u&quot;,&quot;n&quot;,&quot;t&quot;,&quot;e&quot;,&quot;r&quot;,&quot;:&quot;);... &amp;&amp;... eei_write_byte(counter,9); .... ;)</description>
		<content:encoded><![CDATA[<p>Tutto alla perfezione, come sempre, volevo solo aggiungere una postilla. Il 628a non ha il bit EEPGD, quindi a meno che non si risolva differentemente, se da un lato non c&#8217;è bisogno nelle routine di scrittura\lettura tale bit, dall&#8217;altro in una prima occhiata sembrerebbe impossibile scrivere sulla memoria del programma.</p>
<p>L&#8217;unico problema riscontrato, usando un willem prog 5.0 è la lettura della eeprom dal computer, per permettere la lettura della eeprom a posteriori, è necessario settare su ON il flag &#8220;CP EEPROM&#8221; (anche se sembrerebbe li contrario). Talvolta, ovvero quasi sempre, il programmatore non riesce a leggere i primi 4 byte della epprom. Quindi ho cercato di evitare di usarli.</p>
<p>Piccola chicca: __EEPROM_DATA(&#8220;C&#8221;,&#8221;o&#8221;,&#8221;u&#8221;,&#8221;n&#8221;,&#8221;t&#8221;,&#8221;e&#8221;,&#8221;r&#8221;,&#8221;:&#8221;);&#8230; &amp;&amp;&#8230; eei_write_byte(counter,9); &#8230;. ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Di: leo</title>
		<link>http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-9-gestione-della-eeprom-interna-visualizzazione-valore-a-32bit-da-eeprom-a-lcd-e-counter-up-down-con-reset-e-memoria/comment-page-1/#comment-3871</link>
		<dc:creator>leo</dc:creator>
		<pubDate>Sun, 14 Feb 2010 20:48:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.settorezero.com/wordpress/?p=1955#comment-3871</guid>
		<description>finalmente ho trovato una guida per linguaggio c che fa per me
grazie!!</description>
		<content:encoded><![CDATA[<p>finalmente ho trovato una guida per linguaggio c che fa per me<br />
grazie!!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

