PIC 24FJ64GA002 problem a AD prevodnikom

Zdar.

Hovoříš o svém nefunkčním kódu pro PIC24FJ64GB002, ale odkazuješ na cizí kód pro PIC24FJ64GA002. To je zaprvé jiný mikrořadič, a za druhé umísti sem svůj vlastní kód, jinak se tu s tebou nikdo moc bavit nebude.

Cau.

Ja mam PIC 24FJ64GA002 urobil som v predmete spravу chуbu.

Kod je presne rovnak ako na spominanom webu.

[code]#define CLOCK 16

_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF
& COE_OFF & ICS_PGx1 & FWDTEN_OFF)

_CONFIG2(IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD
& OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE)

void delay_us(int usec);
void delay_ms(int msec);

unsigned long ADCValue;

int main(void)
{
CLKDIV = 0;
AD1PCFG = 0xFFEF; // AN4(RB2)
TRISA = 0xFFFE; // RA0
TRISB = 0xFFFF;

T3CON=0b1000000000110000;
PR3 = 3124; // 50000÷((1/16)×256)-1 = 3124

AD1CON1 = 0x8044; // AD1CON1:A/D

AD1CON2 = 0x0400; // AD1CON2:A/D

AD1CON3 = 0x1F05; // AD1CON3:A/D

AD1CSSL = 0x0010; // AD1CSSL:A/D
AD1CHS = 0x0000; // AD1CHS:A/D

IEC0bits.AD1IE = 1; // A/D

while(1)
{

  delay_ms(ADCValue);
  // LED
  LATAbits.LATA0 = !LATAbits.LATA0;

}

return 0;
}

void attribute((interrupt,auto_psv)) _ADC1Interrupt(void)
{
IFS0bits.AD1IF = 0;
ADCValue = ADC1BUF0;
}

void delay_us(int usec)
{
usec=(int)(CLOCK*usec)/10;
while(usec)
{
asm(“NOP”);
asm(“NOP”);
asm(“NOP”);
asm(“NOP”);
asm(“NOP”);
asm(“NOP”);
usec–;
}
}

void delay_ms(int msec)
{
int i;
for(i = 0; i < msec; i++)
{
delay_us(1000);
}
}[/code]

A chápeš aspoň zhruba, jak by ten program měl pracovat?

Jaké máš k dispozici ladící prostředky (IDE a programátor/debugger)?

Edit 180629: Nemůžeme ti pomoci, když nechceš pomoci ty nám a nebo nás dokonce zavádíš jinam. Na tvém webu, na nějž jsem tu dnes v jiném vlákně, které jsi také založil, našel odkaz, popisuješ též PIC24FJ64GB002 (a v tom druhém vlákně taky, a nikoliv “GA”), takže to patrně překlep nebyl - to je jedna věc. Druhá věc je, že autor stránek, ze kterých jsi vložil program, překládal nejspíše MPLAB C30 kompilátorem, ale domnívám se, že ty máš jiný - proto jsem se ptal na vývojové prostředky. Jelikož ovšem neodpovídáš na otázky a ani potřebné informace neuvádíš sám, mohu zůstat jen u domněnek.

Čas ovšem nikdo z nás nikde nekrade, nejsem si už úplně jistý, jestli ještě chci pomoci. Zkus mě přesvědčit.

Ahoj.

Ja mam k dispozicii dva MCUcka , GB a GA. Tento moj prispevok je zamerany na GA. Ja pouzivam MPLAB C30 tiez.
Co sa tyka chapanie, rozumiem akoby mal program fungovat, avsak mi to nejde. Pri presunu trimrom mi led dioda blika chaoticky, tak ako aj ked trimer nepouzijem. Neviem kde moze byt chyba

Je napätie na trimri stabilné?
To skoro zaváňa pinom v lufte.

diallix: Musíš číst správný ADC buffer k tomu správnému kanálu. Máš A/D nastavenej na AN4 a čteš buffer pro AN0.

Zdar :slight_smile: Pěkně to dostal zadarmo :smiley:

Přiznám se že jsem ani nevěděl, s PIC24 jsem ještě nedělal a cíl byl pro začátek získat všechny informace a namotivovat, ale shodou okolností tu mám úplně toho samýho brouka už nějakou dobu na zkoušku nachystanýho, tak jsem si říkal že to konečně vytáhnu a testnu - no, a pak se tu objeví profík a už jsem to nestihl :smiley:

Prosímtě, když už jsme u AD, nenašel jsem ani ve Family refmanu žádnou tabulku s předpočítanýma clockama, jen vzoreček - máš k tomu nějaký doporučení?

A ještě bych se zeptal obecněji: Jak je to u XC16 s .inc soubory, dají se po instalaci kompilátoru někde najít čitelný (tj. nekompilovaný, čitelný člověkem), nebo smůla?

Mahoney: Pravda, dostal to zadarmo. Víc jsem nezkoumal, odmítám luštit nastavení registrů z HEXu, to krutě nesnáším.
Já sám jsem se s tím pěkne zadrbal než jsem A/D rozchodil u těhle PIC24, ale dsPIC byl horší. Ale je to společně s dsPIC moje nejoblíbenější rodina. Na PIC24FJ64GA306 mám postavený speciální PLC.
Já jsem to spočítal tušímže 1us na TAD, ale nejkratší TAD je v Electrical specifiations v konkrétním datasheetu.

*.inc - netuším o co se jedná ve spojení s XC16.

No, pro mě zde bylo trochu překvapení už to, že má ADC nějaký buffery, ovšem když si člověk uvědomí že to dělá až 500 ksps tak to asi význam má. Jinak tak daleko (el. specs) jsem se v datasheetu ohledně ADC nedoscrolloval, to přiznávám, ale mrknu se, ať neumřu blbej. Hledal jsem jen v sekci s ADC, v el. spec. hledat časy převodů mě prostě nenapadlo. Dík za tip.

Že se ti líbí se nedivím, co jsem se tak díval tak jsou skutečně už promyšlenější, mě například asi přijde vhod integrovanej plnohodnotnej řadič přerušení (kterej microchipí osmibity nemají, a třeba i “obyčejná blbá” základní ATmega8 od bývalé konkurence ho má), tedy až se s tím vším pro začátek nějak popasuju.

Ano, napsal jsem blbě tu příponu, .inc je to v ASM, ale myslel jsem samozřejmě soubor s definicemi ohledně hardwaru (MCU) které se připojují při překladu, tedy zde .h soubory. Mám pocit že jsem kolem toho kdysi hledal a našel jsem jen nějaký kompilovaný, ale pro programátora jě někdy důležitý si to přečíst “na vlastní oko”, proto se na to ptám jestli náhodou nevíš (dřív než to nainstaluju, abych věděl jestli to mám vůbec instalovat, nebo jít rovnou na starší C30, o kterým ovšem vím že “lidsky čitelné” definice má).

Dakujem Billy Bob Bean moc za odpoved. Ja sa v kanaloch atd este zatial nevyznam. Mohol by si, prosim ta, napisat ako ma ten kod vypadat?
Bol by som ti strasne moc vdacny.

Na řádku 51 změň nulu na čtyřku.

Zmenil som to a stale nic. LED pomaly blika ale nereaguje na zmenu napätia. som uz z toho zufaly.

Tak si vezmi datasheet toho MCU a referenční manuál k převodníku a podívej se do něj a do programu, co ti říká AD1CHS registr. BBB ti totiž napověděl, když napsal

Tím ti řekl, že si to máš zkontrolovat. V tom refmanu jsou krásný bohatě komentovaný ukázky toho, co je třeba jak dělat.

Kdeby som neskusil vsetky mozne ukazky z datasheetu, tak by som tu nepisal

Zde nebývá příliš zvykem rozdávat instatní řešení jako někde na arduino fóru, pokud tedy očekáváš tohle. Je třeba vynaložit trochu vlastní snahy. O to víc tě pak bude těšit až to rozjedeš - dokázal jsi to sám, a taky tě to o to víc posune dále.

Zřejmě něco přehlížíš, ovšem když to nejde jedním způsobem, tak to musí jít jiným, není-liž pravda? Co třeba vrátit si kód do původního stavu a přepojit potenciometr na AN0 (a ledku jinam) například, když na něj je všechno v původním kódu nastavené - to jsi zkoušel? Nebo ten program zjednodušit až na dřeň, tedy převodník samotný a regulaci led si tam přidat až ve chvíli, kdy budeš mít ten ADC na jistotu rozjetý?

Já se k tomu (svému hardwaru) dostanu nejdříve v pátek, ale nemůže to být zas kdovíjak těžké, dělali to lidé a pro lidi, ne pro kybernetické mozky. Podle tvého webu nepůsobíš jako nějaký noob, takže určitě máš dost zkušeností na to abys věděl, že je ještě dost brzo na házení flinty do obilí.

Ja sa to snazim rozchodit vyse mesiaca a nejde mi nic. Keby si to skusil ty bol by som ti moc vdacny.

No, dokázal jsi mě namotivovat abych konečně nějakej ten PIC24 vytáhnul, když už je tu léta mám v šuplíku :smiley: takže zkouším zkouším - C30 jsem si nainstaloval už včera, teď zrovna jsem ve stádiu hledání nějakého vhodného potenciometru, jinak to mám zapojený a připravený už komplet.

Když už jsme u zapojování, tak jen tak pro jistotu - ten 10 μF kondík na VCAP/VDDCORE máš nějakej schopnější? Měl by totiž být LowESR, takže nějaká obyčejná čína by nemusela stačit ( má mít ESR < 5 Ω). Ten vnitřní měnič napájí celý jádro MCU, takže když nepojede pořádně tohle, tak ti nepojede nic :exclamation:

ano mam zapojeny kondik. myslim si ze spravny, skusal som ich par. kamo som fakt zvedavy ci to pojde tebe.

caute, nevidim tam nikde zapnuti ADC ?

ahoj. skusal som

AD1CON1bits.ADON = 1;
a

AD1CON1bits.SAMP = 1;

ale nic…