www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ADC na 18F4450

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.04
Kraj: Črnuče

PrispevekObjavljeno: Sob Sep 19, 2009 10:18 pm    Naslov sporočila: icon_disgusting ADC na 18F4450 Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Ned Sep 20, 2009 8:01 am    Naslov sporočila:   Odgovori s citatom

Kaj pa je problem sploh?
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.04
Kraj: Črnuče

PrispevekObjavljeno: Ned Sep 20, 2009 9:02 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Ned Sep 20, 2009 12:06 pm    Naslov sporočila:   Odgovori s citatom

Kje se pa sploh zacikla v simulatorju?
Nek razlog mora bit za to...

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.25
Kraj: Ljubljana

PrispevekObjavljeno: Ned Sep 20, 2009 12:55 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.04
Kraj: Črnuče

PrispevekObjavljeno: Ned Sep 20, 2009 1:07 pm    Naslov sporočila:   Odgovori s citatom

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. Whistle

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.04
Kraj: Črnuče

PrispevekObjavljeno: Ned Sep 20, 2009 1:17 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Ned Sep 20, 2009 2:20 pm    Naslov sporočila:   Odgovori s citatom

Poglej ASM kodo, kje se zacikla...
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.04
Kraj: Črnuče

PrispevekObjavljeno: Ned Sep 20, 2009 3:23 pm    Naslov sporočila:   Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Ned Sep 20, 2009 7:13 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Ned Sep 20, 2009 10:00 pm    Naslov sporočila:   Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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