 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.04 Kraj: Črnuče
|
Objavljeno: Sob Sep 19, 2009 10:18 pm Naslov sporočila: ADC na 18F4450 |
|
|
Skušam usposobit ADC na 18F4450, pa me zgleda konfiguracija nekaj .
Vhod uporabljam PortA 0
Kristal je 8MHz
Ostali porti so digitalni, B je izhod - ostali so vhodi.
Koda: |
INTCON = 0 ' Disable GIE, PEIE, TMR0IE,INT0IE,RBIE
INTCON2 = 0xF5
INTCON3 = 0xC0
RCON.IPEN = 0 ' Disable Priority Levels on interrupts
PIE1 = 0
PIE2 = 0
PIR1 = 0
PIR2 = 0
ADCON0 = ADCON0 or 0x01
ADCON1 = ADCON1 or 0x0E ' PORTA_1=A/D vhod, VREF= Vdd+Vss
ADCON2 = ADCON2 or 0xAD ' ADFM=right justified TAD=12, FOSC/16
PortA = 0
TrisA = %11111111 ' določi vhode/izhode
PortB = 0 ' 1 - vhod 0 = izhod
TrisB = %00000000
PortC = 0
TrisC = %00000000
PortD = 0
TrisD = %00000000
PortE = 0
TrisE = %00000000 |
Bi moral vklopiti / izklopiti še kaj? Oziroma, kje sem se zmotil? _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Ned Sep 20, 2009 8:01 am Naslov sporočila: |
|
|
Kaj pa je problem sploh? _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.04 Kraj: Črnuče
|
Objavljeno: Ned Sep 20, 2009 9:02 am Naslov sporočila: |
|
|
V basicu se mučim napisat par vrstic kode, ki bi mi izpisala vrednost napetost na LCD, in zgleda, da koda obvisi ravno na rutini, ki bi morala opraviti konverzijo.
Pravim, da obvisi zato, ker imam tik za funkcijo, ki naj bi opravila konverzijio, funkcijo za izpis na LCD - eno besedilo, pa do tega koraka sploh ne pride.
Prevajalnik ne sporoči napake, simulacija se pa obnaša podobno kot pic na testni plošči.
Tale procesorček pa ima en kup nastavitev, pa se bojim, da sem kaj falil. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Ned Sep 20, 2009 12:06 pm Naslov sporočila: |
|
|
Kje se pa sploh zacikla v simulatorju?
Nek razlog mora bit za to... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.25 Kraj: Ljubljana
|
Objavljeno: Ned Sep 20, 2009 12:55 pm Naslov sporočila: |
|
|
Highlag je napisal/a: |
funkcijo za izpis na LCD - eno besedilo, pa do tega koraka sploh ne pride.
Tale procesorček pa ima en kup nastavitev, pa se bojim, da sem kaj falil. |
Pa si preizkusil, če ti funkcija za LCD da kaj ven ... preden delaš AD konverzijo. Poleg tega pa lahko pri 8Mhz nastaviš div8 pa boš dobil 4us za konverzijo in pa TAD jaz običajno dam na 0.
Tule ti pa še pripenjam kako imam jaz nastavljene FUSE da mi zadeva deluje.
Koda: |
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES BORV20 //Brownout reset at 2.0V
#FUSES PUT //Power Up Timer
#FUSES NOVREGEN //USB voltage regulator disabled
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#FUSES BBSIZ2K //2K words Boot Block size
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL1 //No PLL PreScaler
#FUSES NOUSBDIV //USB clock source comes from primary oscillator
#FUSES CPUDIV1 //No System Clock Postscaler
#FUSES NOICPRT //ICPRT disabled |
|
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.04 Kraj: Črnuče
|
Objavljeno: Ned Sep 20, 2009 1:07 pm Naslov sporočila: |
|
|
Izpis na LCD že deluje. Se najprej izpiše v prvi vrstici "Napetost je"
V naslednji pa imam potem izpis napetosti, vendar sem za štos takoj po uporabi funkcije za branje AD dodal izpis na LCD, ki piše v drugi vrstici, pa se nič ne zgodi.
Procesor obvisi v izvajanju funkcije AD pretvorbe....
Imam par teh picev z predzadnjega piknika, pa bi kakšnega uporabil.  _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.04 Kraj: Črnuče
|
Objavljeno: Ned Sep 20, 2009 1:17 pm Naslov sporočila: |
|
|
Pa še to praktično identična koda deluje na 16F887 - spremenjene so le nastavitve registrov, ki nastavijo delovanje AD pretvornika. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Ned Sep 20, 2009 2:20 pm Naslov sporočila: |
|
|
Poglej ASM kodo, kje se zacikla... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.04 Kraj: Črnuče
|
Objavljeno: Ned Sep 20, 2009 3:23 pm Naslov sporočila: |
|
|
Če prav razumem izpisano ASM kodo, ki jo prikaže program Naredi meritev, počaka 22us, (za konverzijo) in se nato zacikla:
Koda: |
$0B14 $ ADClib_A_C_L_2:
$0B14 $CFC2 F002 MOVFF ADCON0, STACK_2
$0B18 $0E00 MOVLW 0
$0B1A $B402 BTFSC STACK_2, 2, 0
$0B1C $0E01 MOVLW 1
$0B1E $6E02 MOVWF STACK_2, 0
$0B20 $5002 MOVF STACK_2, 0, 0
$0B22 $0A01 XORLW 1
$0B24 $E102 BNZ ADClib_A_C_L_3
;ADClib_A_C.ppas,23 ::
$0B26 $0000 NOP
$0B28 $D7F5 BRA ADClib_A_C_L_2
|
Tale košček se rola potem v neskončnost.
Ni mi jasno kaj naj bi zadeva naredila...
Vsebine registrov ADRESH ali L sploh ne pogleda, ker se mu prej zatakne...
Nič jasno...
Še zmeraj mi pa ni jasno če imam vsaj registre pravilno nastavljene..
Grem pogledat kako koda za 16F887 zgleda. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Ned Sep 20, 2009 7:13 pm Naslov sporočila: |
|
|
Tale cela klobasa je samo čakanje na konec pretvorbe?
Na 16F seriji sta za to dovolj dva ukaza v ASM... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Ned Sep 20, 2009 10:00 pm Naslov sporočila: |
|
|
Če ti kaj pomaga, tole naredi C prevajalnik:
Koda: |
1: #include <18f4450.h>
0000 EF02 GOTO @cinit
2:
3: #device adc=10
4: #use delay(internal=8M)
5: #use fast_io(a)
6:
7: void main(void)
8: {
0004 6AF8 CLRF TBLPTRU, ACCESS
0006 9ED0 BCF RCON, 0x7, ACCESS
0008 6AEA CLRF FSR0H, ACCESS
000A 6AE9 CLRF FSR0L, ACCESS
000C 0E72 MOVLW 0x72
000E 6ED3 MOVWF OSCCON, ACCESS
0010 50D3 MOVF OSCCON, W, ACCESS
0012 50C1 MOVF ADCON1, W, ACCESS
0014 0BC0 ANDLW 0xc0
0016 090F IORLW 0xf
0018 6EC1 MOVWF ADCON1, ACCESS
9: int16 x;
10:
11: set_tris_a(1);
001A 0E01 MOVLW 0x1
001C 6E92 MOVWF TRISA, ACCESS
12: setup_adc(ADC_CLOCK_DIV_16|ADC_TAD_MUL_12|VSS_VDD);
001E 50C0 MOVF ADCON2, W, ACCESS
0020 0BC0 ANDLW 0xc0
0022 092D IORLW 0x2d
0024 6EC0 MOVWF ADCON2, ACCESS
0026 8EC0 BSF ADCON2, 0x7, ACCESS
0028 80C2 BSF ADCON0, 0, ACCESS
13: setup_adc_ports(AN0);
002A 50C1 MOVF ADCON1, W, ACCESS
002C 0BC0 ANDLW 0xc0
002E 090E IORLW 0xe
0030 6EC1 MOVWF ADCON1, ACCESS
14: set_adc_channel(0);
0032 0E00 MOVLW 0
0034 6E01 MOVWF 0x1, ACCESS
0036 50C2 MOVF ADCON0, W, ACCESS
0038 0BC3 ANDLW 0xc3
003A 1001 IORWF 0x1, W, ACCESS
003C 6EC2 MOVWF ADCON0, ACCESS
15: delay_us(10);
003E 0E06 MOVLW 0x6
0040 6E00 MOVWF 0, ACCESS
0042 2E00 DECFSZ 0, F, ACCESS
0044 D7FE BRA 0x42
0046 0000 NOP
16: for(;;)
17: {
18: x=read_adc();
0048 82C2 BSF ADCON0, 0x1, ACCESS
004A B2C2 BTFSC ADCON0, 0x1, ACCESS
004C D7FE BRA 0x4a
004E CFC3 MOVFF ADRESL, 0x6
0052 CFC4 MOVFF ADRESH, 0x7
19: }
0056 D7F8 BRA 0x48
0058 0003 SLEEP |
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 489 dni
Powered by phpBB © 2001, 2005 phpBB Group
|