Vstupy-nefunguje zápis do TRIS, debugger preskakuje tlačidla

Čaute, mám celkom zvláštny problém, akým spôsobom konfigurovať vstupy u PIC, očividne len zápis do TRISA nestačí, kedže to úplne ignoruje vstupy, taktiež som skúšal aj používať inicializáciu priamo z datasheetu, no neúspešne, každý vstup dávam aj cez odpor na zem. Konkrétne jednoduchý príklad: Mám tlačítko, krokový motor, ak je tlačítko stlačené, krokový motor ide inou rýchlosťou ako keď tlačítko pustím, no program vstup úplne ignoruje, po stlačení tlačítka sa nič nedeje, taktiež debugger, jednoducho tlačítko preskočí aj keď je stlačené- pri krokovaní. Stretli ste sa s niečim podobným ??

:arrow_right: administrator: přejmenováno z "Vstupy PIC"

hod se kód:)

Nepíšeš ani typ procesoru. Ale třeba PIC18xxxx má na portu A defaultně nastavené analogové vstupy. Ty pak musíš zakázat v registru ADCON. Ale příčin může být samozřejmě víc - takže bez podrobnějších informací ti nikdo moc nepomůže.

jasné, sorry, no tento problém práveže pretrvával aj pri PIC16F688, a momentálne aj pri PIC18F2320, a to pri všetkých druhoch pinov- RA,RC,RB,…, do ADCON1 som skúšal dávať použité piny ako Digital I/O, no bez zmeny.
kód je tu:

[code]#include <p18f2320.h>
#include <delays.h>

void main()
{
TRISB=0b00000000; // Porty B= vystupy
LATB=1;
TRISA=1;
LATA=0;

while (1) //Nekonecny cyklus
{
if (LATB==0b00010000)
{
LATB=1;}
while (LATA==1) {
Delay100TCYx(100);
LATB=LATB<<1;
}

Delay100TCYx(1);
LATB=LATB<<1;
}

}[/code]

Takže minimálně dvě věci ti tam chybí:

PORTA=PORTB=PORTC=0; tímto aktivuješ na začátku porty

ADCON1=0x0F; nebo 0b00001111 tím nastavíš vstupy portu A jako digitální

ADCON1 tam som už 0x0F dal :slight_smile: pridal som tam tie PORTY, no stále bez zmeny, na tlačítko na pine RA0 to nereaguje. Ono je problém, že ani v Proteuse mi to nefunguje, tak to vyzerá byť na niečo s programom.

ale v kódu ho nemáš - tak ho tam vrať
A na stav pinu se ptej spíš takto:

while(PORTAbits.RA0==1) pokud tedy píšeš v MPlab C18

a taky bys měl mít na vstupu pevně definovanou úroveň ať už vnitřním, nebo vvnějším pullupem (odporem proti 5V)

Tak zdá sa že to bolo tým: PORTAbits.RA0==1 , po miernej úprave programu už program frčí :slight_smile: Ďakujem :slight_smile:
Ešte mam 1 problém, a to čo sa týka Delay, dám sem aj ten istý program :slight_smile: Problém je v tom, že tak malý Delay aký je v programe trvá v skutočnosti omnoho ale omnoho viac, napr. 250k Delay by pri 4MHz oscilatore mal trvať 0,25s, a v skutočnosti trvá snaď aj 20x viac.

[code]
#include <p18f2320.h>
#include <delays.h>

void main()
{
TRISB=0b00000000; // Porty B= vystupy
PORTA=PORTB=PORTC=0;
PORTB=1;
TRISA=1; //RA0-vstup
ADCON1=0x0F;

while (1) //Nekonecny cyklus
{
if (PORTB==0b00010000)
{
LATB=1;}
if (PORTAbits.RA0==1) //tlacitko je stlacene
{
Delay100TCYx(10);
PORTB=PORTB<<1;
}

else
{
Delay100TCYx(1); //tlacitko nie je stlacene
PORTB=PORTB<<1;
}

}

}[/code]

Delay100TCYx je čekání 100 cyklů procesoru - 1cyklus je pokud se nemýlím 4 takty oscilátoru. Takže při 4MHz je to 1/4000000= 0,25us.

Zakže tvoje Delay100TCYx(10); trvá : 1000,2510 = 250us čili čtvrt milisekundy.

Taky nepíšeš, jak jsi k těm časům přišel. Pokud je měříš na stopkách v simulátoru - nezapoměň nastavit správnou frekvenci taky v něm - v debugger - settings.

Skôr som myslel, že mám pravdepodobne problém nastaviť oscilátor pri PIC18 - vnútorný, keď v Configuration bits dám HS, XT tak mi napálený program v procesore nič nerobí a keď zvolím nejaký z RC oscilátorov tak program napaliť ide, no hodnoty delay z programu sa proste so zapojenou reálnou aplikaciou nezhodujú, správa sa to jak keby tam bol nastavený oscilator nejakých 32kHz. Ako sa dá prestaviť na 4MHz ?

OSCCON=0b0110000; by mělo podle DS nastavit int. oscilátor na 4MHz

#pragma config OSC = INTIO1 nastaví fuse na int oscilátor