Newsgroup: it.hobby.elettronica.digitale
Titolo: 16f877 e usart

ciao
vorrei vedere come funziona la comunicazione seriale con i pic
mica potreste indicarmi un sorgente molto semplice del tipo
invio un byte dalla seriale e il pic accende un led
giusto per vedere come funziona?
grazie a tutti
roberto

 invio un byte dalla seriale e il pic accende un led
Già guardate le application note?
http://www.microchip.com/1010/suppdoc/appnote/product/picmicro/16f87x/
index.htm
-- 
Protect your software at all costs; all else is meat.
News 2000 [v 2.06] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

 Gią guardate le application note?


 ha scritto nel messaggio
news:M8yVb.801$2j2....@twister2.libero.it...

Beh, per inviare 1 byte basta scrivere TXREG = byte che vuoi inviare.
Ovviamente prima devi settare i pin RC6/RC7 in modo opportuno ed impostare
SPBRG e BRGH in base al baud-rate ed al quarzo che usi per il PIC.
Sul data-sheet del componente trovi tutto quello che ti serve, se hai ancora
bisogno fischia.
Ciao
Pow

 Pow
Ciao powermos ... mi sembri l'unico che ne sà qualcosa!
Ti volevo chiedere semplicemente: mi sta arrivando il pic basic pro
compiler (ovviamente programmazione basic) che differenza c'è tra il basic
e l'assembler? è piu facile "intuirlo" e andare avanti?
Ciao powermos .e un grazie anticipato. 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

...devi anche abilitare l'usart settando il bit 7 di RCSTA e abilitare la
trasmissione settando il bit 5 di TXSTA
Ciao
Lucio

e l'assembler? è piu facile "intuirlo" e andare avanti?
IMHO: il Pic Basic è una ganzata, veloce, pratico e compagnia bella...
a patto di sapere cosa si sta facendo. Ovvero conoscere i Pic per come
sono fatti. Altrimenti rischi di perdere tempo per qualunque virgola
storta.
Esempio: accendere un led con Pic Basic
High 0
Comodo, no ? Ma il compilatore quando ti legge 'sto codice dà per
scontato talmente tante cose che se non tieni le orecchie ritte rischi
facilmente di fare danno.
Altro esempio, la funzione PWM Out.. comodissima, ma si prende il
controllo del micro per tutto il tempo di generazione del segnale.
Quindi devi de-interlacciare tu il comando manualmente, se vuoi nel
frattempo leggere qualche pulsante, che sò...
Saluti
SB
---------------------------------------------------
togli i caratteri accentati per rispondere via mail


Procediamo con ordine, per quanto riguarda il linguaggio di programmazione,
se vuoi un consiglio spassionato segui questo iter:
1- assembler
2-linguaggio ad alto livello come il C (il basic per il PIC non l'ho mai
usato)
Vediamo ora le motivazioni per cui ti dico questo.
Lavorare in assembler ti consente di entrare in intimo contatto con la
macchina che devi programmare, questo è molto importante per capire i
meccanismi che regolano il funzionamento del microcontrollore e quindi
riuscire a sfruttarlo nel miglior modo possibile. L'assembler ti vedrà
lavorare a livello di singola istruzione, sarai quindi tu a dire al
microcontrollore, questo valore spostalo in questo registro, adesso sommalo
a qeullo contenuto in quest'altro registro e cosi via.
Fatto questo, una volta che sarai in grado di padroneggiare il linguaggio
assembler senza problemi, avrai anche capito come funziona esattamente il
microcontrollore. A questo punto potrai passare ad un linguaggio ad alto
livello che ti consentirà di astrarre dal tipo di macchina scrivendo un
codice "moderatamente" portabile. Il moderatamente è d'obbigo infatti anche
scrivendo in un linguaggio standard come ANSI C sicuramente avrai delle
differenze fra un programma scritto per girare su un PIC ed uno su un
microcontrollore NEC. Queste differenze riguardano essenzialmente il modo
con cui certe funzioni particolari (ad esempio quelle che consentono di
gestire gli IRQ anche detti Interrupt) devono essere invocate. Quello che
invece sarà generico sono le funzioni di uso generale, ad esempio una
routine che esegue determinati conti oppure una routine che implementa un
orologio. Scrivere il PIC basic sicuramente ti consentirà di programmare i
PIC, ma ti bloccherà la strada verso altri microcontrollori che, oramai,
sono universalmente programmabili in linguaggio C. tanto per farti un
esempio, tempo fa scrissi un programma per un microcontrollore NEC, poco
dopo sono riuscito ad utilizzarlo al 90% senza grosse modifiche per un
microcontrollore PIC (non sempre comunque si ha questa fortuna ;-P).
Seconda questione è relativa ai tool di sviluppo, per la programmazione in
assembler (quindi file sorgenti con estensione .asm) puoi lavorare
direttamente con MPLAB fornito gratuitamente dalla Microchip, per il
linguaggio C puoi scaricarti il demo della Hi-Tech PICC C-Compiler,
compilatore funzionante in modo demo (solo più lento della versione
registrata) con i PIC della famiglia 16F84/16C84, quelli molto usati in
passato per le card via satellite pirata. Per il PIC basic non
saprei aiutarti e che compilatore consigliarti.
In generale, comunque, anche il basic è un linguaggio ad alto livello,
quindi ti consente di astrarre in certa misura dalla macchina che devi
programmare, ma nuovamente ti esorto ad imparare il linguaggio C, come libro
di riferimento non posso che consigliarti l'ottimo Linguaggio C di Brian
W.Kernighan and Dennis M. Ritchie edito dal gruppo editoriale Jackson (penso
sia alla seconda edizione), il libro è scritto direttamente da chi lo ha
inventato, quindi è un ottimo riferimento per imparare questo meraviglioso
linguaggio.
Per la programmazione del dispositivo hai due strade, la prima consiste nel
realizzare uno dei tanti ludipipo, multipippo ecc... che trovi in rete, io
personalmente preferisco  usare ICD, un sistema low-cost della Microchip (mi
sembra inferiore alle vecchie 300kLire) che oltre alla programmazione di
micro della famiglia PIC16F876/877 consente anche l'emulazione real-time
degli stessi e la programmazione ISP cioè senza togliere il microcontrollore
dall'applicazione che lo ospita, quindi si programma e si emula on-board.
Per adesso penso che le info fornite siano sufficienti, se ti serve altro,
chiarimenti o qualsiasi cosa scrivi sul ng, sono sempre disponibile, tempo
permettendo...
Ciao a presto
Pow

 ha scritto nel messaggio
news:DtOVb.5253$HO2...@news.edisontel.com...

Certo, ma se dici tutto il gusto della sperimentazione dove lo metti? ;-P
Ciao
Pow

 permettendo...
Ovviamente questo è il mio personale punto di vista che potrà anche non
essere condiviso...
Ciao a tutti
Pow

 Certo, ma se dici tutto il gusto della sperimentazione dove lo metti? ;-P
si ma non vorrei che qualcuno si beccasse un esaurimento a forza di scrivere
in Txreg senza veder uscire nulla ...:-)
Ola!
Lucio

 ha scritto nel messaggio
news:OU%Vb.5406$HO2....@news.edisontel.com...


 ha scritto nel messaggio
news:OU%Vb.5406$HO2....@news.edisontel.com...

HAR HAR HAR!!!!
Ciao
Pow

 che voi sappiate programmi come il pic simultor
Scusa la domanda, ma cosa sarebbe pic simulator? Non ho mai sentito un
programma di questo tipo, in genere simulo con MPLAB ed emulo con ICD, se
esiste un'altro programma che consente di fare simulazione mi piacerebbe
dargli uno sguardo.
Ciao
Pow

 perdendo :-)
[CUT]
Possiamo tentare con una tecnica d'approccio più radicale e forse più
costruttiva,
se posti il codice che usi possiamo analizzarlo in modo tale da poterti
consigliare per il meglio. Visto che ci siamo già passati
possiamo risparmiarti il calvario.
Osservazione
--------------
Per il pilotaggio della seriale puoi anche usare una tecnica ad Interrupt
(io in tutte le mie
applicazioni uso solo questo tipo di pilotaggio), in sostanza ti crei un
vettore in memoria (alias, una serie di registri contigui), carichi quello
che devi trasmettere nel vettore, carichi in un registro d'appoggio il
numero di caratteri da trasmettere ed alla fine fai semplicemente TXIE = 1
in questo modo abiliti l'interrupt di trasmissione e lui fa tutto in
automatico, ovviamente dovrai
scrivere la routine di gestione che lavora sotto interrupt, ad esempio
potrai avere (scritto in C):
if (TXIE && TXIF)
     {
       // ------------------------------- 
       // Routine di trasmissione seriale
       // -------------------------------
        TXREG = SerialBufferTx[TxCtr];  // Trasmette un carattere attraverso
la seriale
 if ((TxCtr + 1) >= TxMaxChr)     // Verifica se ho trasmesso tutti i
caratteri contenuti nel buffer di TX
         {
         TXIE = 0;    // Disabilita interrupt trasmissione seriale
          TxCtr = 0;    // Azzera contatore caratteri da trasmettere
         }
 else
    TxCtr = TxCtr + 1;   // Aggiorna puntatore al prossimo carattere da
trasmettere
 }
Nel main, o in qualunque altro punto dove vuoi trasmettere qcsa dovrai
scrivere:
.....
SerialBufferTx[0] = 'C';   // Primo carattere da trasmettere
SerialBufferTx[1] = 'I';
SerialBufferTx[2] = 'A';
SerialBufferTx[3] = 'O';   // Ultimo carattere da trasmettere
TxMaxChr = 4;       // Numero massimo di caratteri da trasmettere
TXIE = 1;       // Abilita l'interrupt di trasmissione seriale (la routine
sotto IRQ si occupa della trasmissione)
......
Ovviamente, prima di fare qualsiasi operazione con l'USART, dovrai abilitare
l'interfaccia seriale ed impostarla nel modo che ti serve,
ad esempio:
// Imposta il registro di direzione del PORTC
TRISC = 0b10111111; // RC6 in OUTPUT (TX), tutto il resto in INPUT
// Inizializza USART
 // Per Fosc = 20 MHz usare BRGH = 0 e SPBRG = 32
 // Per Fosc = 10 MHz usare BRGH = 0 e SPBRG = 15
 // Per Fosc =  4 MHz usare BRGH = 1 e SPBRG = 25
 TXSTA = 0b00100010; // Abilita la trasmissione, trasmissione ad 8 bit, modo
asincrono, BRGH=0
 RCSTA = 0b10010000; // Abilita la porta seriale RC6/RC7, ricezione 8 bit
 SPBRG = 15;  // Baud rate generator per Fosc = 10.000 MHz
 PIE1  = 0b00100000; // Abilita USART receive interrupt
Ricordati anche di impostare per il minimo errore i valori di BRGH e SPBRG
diversamente potresti avere difficoltà nel collegarti con altri sistemi,
i valori che ti ho riportato sono funzionanti e provati su PIC 16F876/877
interfacciati usando VB60 mediante PC con RS232 emulata via USB a 9600 baud.
Ciao
Pow

 ha scritto nel messaggio
news:k7UWb.228524$VW.92...@news3.tin.it...


 grazie ancora roberto
Grazie a te per le info, se posso essere utile a disposizione.
Ciao
Pow

ciao
anche il simulatore dell'MPLAB mostra il contenuto di tutti iregistri della
RAM..........