Goede middag,
als nieuwkomer in de pic-wereld ben ik aan het experimenteren met een 74HC595 register samen met de PIC16F1939. Ik kom een raar fenomeen tegen en weet niet precies waar het probleem ligt.
Ik heb een clock signaal nodig en ik wou dit eerst maken dus om te testen met led's enz heb ik onderstaande code gebruikt:
void main(void)
{
OSCCON = 0b11110000;
ADCON0 = 0x00;
TRISB = 0x00;
PORTB = 0x00;
while (1) {
RB0= 1;
RB1 = 0;
__delay_ms(100);
RB0 = 0;
RB1 = 1;
__delay_ms(100);
}
}Normala zou RB1 en RB0 tegengesteld moeten knipperen maar in mijn geval knippert RB1 enkel. Als ik de code aanpas naar:
void main(void)
{
OSCCON = 0b11110000;
ADCON0 = 0x00;
TRISB = 0x00;
PORTB = 0x00;
while (1) {
PORTB = 0b00000010;
__delay_ms(100);
PORTB = 0b00000001;
__delay_ms(100);
}
}Werkt het wel... Ik vind dit zeker raar. ik heb al zitten kijken naar register settings enz maar kom er maar niet uit. Iemand die me toevallig wat meer info kan verschaffen?
PS: ik maak gebruik van de hi tech compiler.
Bedankt
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Aan m'n pic hangen er 3 LED's waarvan er 2 zouden moeten schakelen. Anders hangt er nieks aan de pic. Zou het kunnen zijn omdat de schakeling gevoed wordt door de PC en niet apart gevoed is?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Als directe port writes lukken, en bit operaties niet, dan is er toch meestal een te zware belasting aan de RB0 pin.
ik heb net eventjes de scoop aan de pinnetjes geschakeld (zonder belasting) en RB0 krijg ik geen uitgang signaal op RB1 wel. Ook heb ik de belasting omgewisseld van pinnetjes maar geen verandering.
Ook al even een nieuwe PIC geprobeerd maar het probleem blijft.
hadv
Just find out what you like and let it kill you
In de datasheet staat max 25 mA source/sink per pin.
Overigens blijft een stroombeperkende weerstand altijd noodzakelijk.
Als regel is het beter niet PORTx te gebruiken maar LATx, hiermee omzeil je het Read-Modify-Write probleem. Of dit nu anders gaat werken betwijfel ik echter, ik lees net Note 1 op pag 134: writes to PORTB are actually to LATB.
PORTB wordt mede bepaald door de ANSEL en WPUB registers, lees even op pag 135. Check verder pag 136 voor de overige registers die van invloed kunnen zijn (dat zijn er nogal wat).
Tenslotte: 100 mS is wel aan de korte kant als je alleen maar aan het uitproberen bent.
RobHoi
42
Hoi,
wat gebeurt er als je de volgorde van RB0 en RB1 omdraait?
Kijk ook eens hier: http://new-web.htsoft.com/all/showflat.php?Cat=&Number=107322&page=&fp…
A word of warning - leave a short delay after writing one bit before writing the other. Setting a port bit is achieved as read/modify/write. If you change one output bit state then try to change the other in the next instruction the second read may well read the original state of the first bit, since load capacitance may mean that the output voltage has not had time to reach its new state.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je moet in ieder geval ANSELB register op digitaal zetten, anders blijft de pin altijd '0'.
LATx registers is inderdaad beter voor output.
Delay tussen pin writes is alleen nodig bij te zware ( >3/>8mA) of capacitieve belasting.
Op 23 mei 2011 15:09:26 schreef RobHoi:
wat gebeurt er als je de volgorde van RB0 en RB1 omdraait?
[...]
dan branden m'n led's omgekeerd. Door een korte delay (1us) toe te voegen knipperen m'n led's wel juist. nice ^_^
Bedankt!!
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op 23 mei 2011 15:17:35 schreef Arco:
Beter LATB gebruiken. Dan kun je de delay weglaten...
is dit ook aan te sturen in dezelfste manier als RB0? (bit per bit dus)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ja. Ik gebruik C niet, dus je moet even in C docs kijken hoe de bits dan heten.
(Misschien iets van LATBbits.0 of LATB.0?)