Pystyykö kyseisellä pic:llä tuottamaan itsenäisesti tietyntaajuista keskeytymätöntä yks/nolla pulssia ulos pinnistä, ilman keskeytyksiä tai pyörimättä luupissa.
Sillein, että se ei haittaisi muun ohjelman suoritusta.
Ei haittaa, jos vaikka sais pienen esimerkin asmilla.
Sillein, että se ei haittaisi muun ohjelman suoritusta.
Ei haittaa, jos vaikka sais pienen esimerkin asmilla.
Vastaukset 4
Vanhimmat
esimerkki on tosin basicilla, mutta näet pwm-partissa rekisterit mitkä vaikuttavat pwm-alustukseen:
@ DEVICE PIC16F628, INTRC_OSC_NOCLKOUT
@ DEVICE PIC16F628, MCLR_OFF
@ DEVICE PIC16F628, WDT_OFF
@ DEVICE PIC16F628, PROTECT_OFF
@ DEVICE PIC16F628, BOD_OFF
@ DEVICE PIC16F628, CPD_OFF
TRISA = 255 'All pins are input.
TRISB = 0 'All pins are output.
'=====Timer2 settings - 8Bit ====================
T2CON = 000000
INTCON.7 = 0 ' Disable interrupts.
'===================PWM Part===============
CMCON = 7 ' PortA = digital I/O
VRCON = 0 ' Disable A/D Voltage reference.
PR2 = 255 ' PWM frequency.
CCP1CON = 001100 ' PWM Mode selected.
T2CON = 000100 ' Timer2 ON 1:1 prescale
CCPR1L = 0 ' Set PWM Duty-Cycle
PotPin VAR PORTB.0
Begin:
POT PotPin , 255, CCPR1L 'Read Pot value and put on PWM Module. From 0 to 255. From zero to full speed.
'... have your switch readings here.
'......
'........
Goto Begin
END
Kun vastaus tuli noin nopeasti, olis vielä yks kysymys toteutukseen liittyen.
Pitäisi keskustella PIC:llä PC:n kanssa, PIC:llä kirjoittaessa TxD linjalla PC:lle ei PC:n puolelta ole ongelmaa kun kirjoitettu data menee puskuriin, mutta toisin päin jos PC:llä kirjoittaa PIC:lle, onko siellä joku puskuri sille, vai täytyykä se hoitaa keskeytyksillä, vai miten pitäisi hoitaa PIC:n RxD linjan valvominen.
Ideana rakentaa prommeri ja PIC:llä kirjoittaessa esim. Flash:a ei keskeytyksiä saisi tulla kirjoitus hetkellä, mutta silti Flash:a kirjoittaessa pitäisi pystyä lukemaan, myös PIC: RxD linjaa.
Vai miten tuo olisi järkevintä toteuttaa.
Mulla ei ole oikein kokemusta sarjaportin vuonohjauksesta, mutta luultavimmin se hoituisi rts/cts kättelyllä. Kun pic on vapaa vastaanottamaan nostat vain sen pinnin (ylös? tai alas) mihin on pc:n sarjaportin cts-kytketty, näin pc:n päässä tiedetään "linjan" olevan vapaa lähetykseen.
Picin rx bufferi on vain tavun mittainen, se täytyy lukea aina vastaanoton välissä, joka samalla tyhjää sen. Jos rx ei lueta ennenkuin uusi lähetys tulee tapahtuu ylivuoto ->
RCSTA-rekisterin, OERR-bitti menee päälle. OERRista siis näkee tapauhtuiko vastaanotto tapahtuma oikein.
Jonkulainen vuonohjaus siihen kannattaa laittaa. f 628 on niin vähän muistia ettei sille kovin isoa puskuria pysty tekeen vaan prommaus pitää hoitaa lennosta. Esim joissain eepromeissa on 10ms sisäinen kirjoitussykli, jonka aikana piirille ei kirjoittaa mitään, jos sitä kirjoittavalla picillä ei ole mitään vuonohjausta, sen 10ms aikana vastaanotettu sarjaliikenne hukkuu, jos sitä ei puskuroida tai muuten vuonohjata. Tulipas sekavaa :D
Picin rx bufferi on vain tavun mittainen,
No se riittää tässä tapauksessa, jos PC on lähettänyt tavun pic:lle vaikka sitä ei heti lue se tavu säilyy siellä puskurissa niinkö?