#9704
Picmicro675Picmicro675
Moderatore

A mio giudizio non ti conviene usare 32 bit per la lettura del canale analogico, sempre si vuole ottenere una lettura snella meglio indicata per il micro in uso. Se usassi una word potresti ottenere la media di 64 campioni. Anche il ritardo è solo un periodo perso, La lettura avviene in modo corretto con l’hardware e il comando proprio.
In quanto alla compilazione della Configurazione meglio se usi il plugin di Proton IDE. Al limite assicurati che non ha magari il WDTE o MCLRE abilitati.

Symbol NUMSAMPLE 40
$if NUMSAMPLE > 63
$ error NUMSAMPLE exceed the maximum
$endif
Dim Tlong As Word

Sub readADC()
      For var1 = 1 To NUMSAMPLE               ' Ciclo 32 letture ADC
        v_adc1 = ADIn chnl              ' lettura canale prefissato
        tlong = tlong + v_adc1
      Next var1
EndSub

Per quello che rigurda il PWM, ho trovato un’ idea dalla rete che ovviamente utilizza solo sul timer0, quindi si avrebbe una frequenza massima di Fosc / 256 = 3906,25 Hz teorici a 4 MHz. Per farlo ti serve solo

If TMR0IF = 1 Then                  ' Interrupt per TIMER0
  TMR0IF = 0                        ' rimuove il  flag
  If OUT = 1 Then
    Clear OUT
    TMR0  =  -PULSE                 ' carica il periodo basso
  Else
    Set OUT
    TMR0 = PULSE                    ' carica il periodo  basso
End If

Se non ti serve tutto un byte di risoluzione allora si può salire di frequenza, solo che comincia a perdere di prontezza nel ricalcolare il periodi. Se ti interessa farò il dovuto rimessaggio.

In quanto a quello che il simulatore ti mostra e quello che succede al reale, ci sono diversi fattori come le sviste (parlando delle mie esperienze) ai collegamenti e disturbi elettrici che il simulatore non tiene conto. Per questo dovresti tener conto il metodo di debug nel software che segnala a che punto si trova nel programma. Per questo la via più spiccia sarebbe di usare la seriale e un piedino assegnato a fare il lavoro. Ma con gli interrupt abilitati, sarebbe meglio che disabiliti il GIE per inviare il messaggio.
Altrimenti se hai bisogno di mantenere la massima velocità allora conviene che utilizzi un piedino per segnalare un certo punto un determinato evento, per quello ti basta tenere sott’occhio con l’oscilloscopio. Sarebbe meglio se hai un analizzatore analogico del tipo
logic analizer
Il prezzo è moderato e non dovrebbe superare i 10€. Ovvio che questo tipo ha solo otto ingressi.
Allora potresti sondare tutti i piedini e vedere se corrisponde a quanto voluto.