PIC18F47J53 A/D muundi probleem
#11
(21-02-2011, 04:57 PM)andrei Kirjutas: Mul jäi küll kahe silma vahele, et 18us sisse ei mahu kuidagi 4xTad sämplimise aeg, sest 4xTad = 4*64/48 us = 5.3... us. Samas:
Kood:
movlw    0x96                    ; 1001 0110 B'10000110';0xBE;
movff    WREG,ADCON1                ; paremale, 4 Tad, F/64

Kas tõesti prose unustab signaali sämplida ja tuleb ise see 2us viide ette panna?

Siis peaks muretum olema - saab kanali ümber lülitada ja mõõtma asuda.
Vasta
#12
Tänud kaasamõtlejatele, paistab, et leidsin lahenduse. Nimelt vihjati (MC foorumis ja paar tuttavat ka) et MPLAB ei oskagi AD muundit simuleerida. Soovitati anda muundi tulemused stimuluse failist. Seda ma ei teadnud sest siiamaani sain kõik prosed simutud ja sarnast viga ei olnud kunagi. Ja erinevalt vihjest ei suutnud ma leida MPLABi help'ist viidet AD muundi mitte toimimise kohta. Samas mõnede C-koodi simuleerimisel olla lausa küsitud stimuluse faili! Ju siis on piirangud.Niipalju MPLABi simust....
Reaalse prose juures oli viga minu näpukas koodis mis CTRL-C/CTRL-V kaudu pahaloomuliselt paljunes....
Nüüd on tulemus maketil enam-vähem õige.
MPLAB imeb vilinal Smile

(21-02-2011, 04:57 PM)andrei Kirjutas: Mul jäi küll kahe silma vahele, et 18us sisse ei mahu kuidagi 4xTad sämplimise aeg, sest 4xTad = 4*64/48 us = 5.3... us....
Reaalne mõõtmine võtab umbes 24 us. Ossi ekraanilt loetud.
Vasta
#13
1 pisike probleem on mainitud prosega veel, mis tahaks spetside õpetussõnu.
Nimelt on vaja vähemasti 4 aga soovitavalt 6 PWMi kanalit mudeli mootorite tüürimiseks. Valisin tolle prose just seepärast, et tal on raua PWMe piisavalt. Aga...lugedes DS-i selgub et neid ei saa kasutada sest PWMi taimerite PR register on vaid 8-bitine. Ehk siis kas teed PWMi >20kHz sagedusega, mis mudeli puhul ei ole võimalik (regulaatorid ei seedi ära) või tõmbad prose takti 3,millegi MHz peale. Mida ma samuti ei sooviks sest nii ei jõua ujuvaid punkte (float arve) piisavalt kiiresti loksutada.
Kas ainus lahendus on tunnistada oma viga prose valikul ja teha PWM softiliselt või leidub mingi kaval trikk? Niipalju uurisin et taimeritele kahjuks sisemise madalama sagedusega ossi pealt (vist ?) takti võtta ei saa.
Vasta
#14
Kas andmelehel tabelit 18-2, "EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 40MHZ", oled vaadanud? Eeljagaja ja suurendatud resolutsiooni kasutamisel on seal madalaimaks PWM-i sageduseks saadud 2.44kHz.

Ujukomaarvutused on üldse aeglased, aga muidugi mugavamad. Häda korral saad fikskoma peale ringi teha ja kiirust võita.
Vasta
#15
(03-03-2011, 12:19 AM)andrei Kirjutas: Kas andmelehel tabelit 18-2, "EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 40MHZ", oled vaadanud? Eeljagaja ja suurendatud resolutsiooni kasutamisel on seal madalaimaks PWM-i sageduseks saadud 2.44kHz.

Jah, muidugi vaatasin. Ma prose valikul kahjuks eriti ei süvenenud, lootsin et saab konstante muutes sagedust alla tõmmata aga paistab et mitte.
Vaja on iga 5 ms tagant korduvat 1..2ms pulssi. See teeb sageduseks 200 Hz. Jääb vist vaid softiline PWM ?
Vaatasin, et PIC24-l on PR registrid juba 16-bitised aga paraku ei leidnud 18f47j53-ga pin-compatible PIC24 versiooni.
Vasta
#16
Cortex M0 (ARMv6) peal on minimaalne katkestuses toimetamise aeg 49MHz takti korral väga jämedalt 1 us. PIC on ilmselt kiirem, aga tasub üle mõõta.

Soft-PWM tundub olevat tõesti sobilik olema, aga iseküsimus, mis resolutsioon?
Vasta
#17
(03-03-2011, 01:22 PM)andrei Kirjutas: Cortex M0 (ARMv6) peal on minimaalne katkestuses toimetamise aeg 49MHz takti korral väga jämedalt 1 us. PIC on ilmselt kiirem, aga tasub üle mõõta.

Soft-PWM tundub olevat tõesti sobilik olema, aga iseküsimus, mis resolutsioon?
Tore oleks 10 bitti resot aga 8 kärab ka. Esialgu.
Vasta
#18
(03-03-2011, 07:10 PM)felch Kirjutas: Tore oleks 10 bitti resot aga 8 kärab ka. Esialgu.

Kas saad ära kasutada CCP mooduleid võrdlusrežhiimis (Compare Mode)? Need on nimelt 16-bitised. Timer1 lubab kuni 1:8 eeljagajat, 48MHz takti korral loeb 5ms jooksul taimer 30000-ni, mis mahub ilusasti 16 biti sisse.

Näiteks nii:
CCP-d kasutavad Timer1 või Timer3-e.
CCP4-CCP7: konfigureerid 1-2ms peal genereerima katkestust. Katkestust teenindavas funktsioonis lülitada vastava väljundviigu maha.
CCCP-8: konfigureerid 5ms peal genereerima katkestust. Katkestust teenindavas funktsioonis lükkad kõik väljundviigud kõrgeks ja nullid TMR1 (või TMR3).

Teine variant - kas piisab isegi CCP4-CCP7 konfigureerimisest režiimi CCPxM=1001, kus väljundviigu mahalükkamiseks pole katkestust vajagi.

Äkki annab ideid.
Vasta
#19
(03-03-2011, 08:03 PM)andrei Kirjutas: Teine variant - kas piisab isegi CCP4-CCP7 konfigureerimisest režiimi CCPxM=1001, kus väljundviigu mahalükkamiseks pole katkestust vajagi.

Väga tumegantne Smile lahendus, tänks! Töötabki täpselt nii. Ma pole seni compare režiimi kasutanud, ei teadnud et ta nii asjalik asi on.
ECCP-d töötavad samamoodi ja nüüd on mul 6 PWM-kanalit täiesti olemas. Saab hakata kopterit juhtima...
Vasta
#20
PIC on tumegantne Smile

Näiteks LPC1343-ga saab sama teha, aga peab PWM kanaleid erinevate taimerite vahel jagama.
Vasta


Alamfoorumi hüpe:


Kasutaja, kes vaatavad seda teemat: 1 külali(st)ne