[ deniah @ 21.03.2010. 00:33 ] @
Ovako, napisao sam program koji čita stanje sa jednog pina mikroprocesora i zavisno od napona na tom pinu pali neku od lampica. E sad to radi na razvojnoj ploči ali kad priključim van razvojne ploče neće. Promjena napona se uopšte ne odražava na ANS3, tj na njemu je uvijek 0V. Ako postavim ulaz za a/d na AN0 (umjesto AN3) tada sve radi kako treba.
Nije da moram baš da koristim ovaj pin nego me yanima šta je uzrok ovome.

Evo koda:
Code:

program korektor

dim ad_tmp as word            'za smjestanje rezultata konverzije
const over_up as word  = 770            'maksimalna vrijednost napona na oko 245V
const value_1 as word = 620           'za pad napona na 200V
const value_2 as word = 500           'za pad napona na 180V
const over_down as word = 480         'minimalna vrijednost napona na oko 160V

sub procedure set_voltage
    if (ad_tmp < over_up) and (ad_tmp > value_1) then
       gpio = %00000001      'prvi stepen (napon izmedju 220V i 245V) gpio.0 = 1
    end if

    if (ad_tmp < value_1) and (ad_tmp > value_2) then
       gpio = %00000010     'drugi stepen (napon izmedju 180V i  200V) gpio.1 = 1
    end if
      
    if (ad_tmp < value_2) and (ad_tmp > over_down) then
       gpio = %00000100     'treci stepen (napon izmedju 160 i 180V)     gpio.2 = 1
    end if
end sub

sub function is_error as byte
    result = 0
    if (ad_tmp > over_up) or (ad_tmp < over_down)  then 'prekoracenje u plus ili u minus.
                                                        'napon je preko 245V ili ispod 160V
       gpio = %00100000                                 'palimo error (gpio.5) pin
       result = 1
    end if
end sub

main:
  GPIO = 0                                 ' inicijalizacija GPIO porta
  CMCON = 7                                ' gasimo komparatore
  TRISIO = 0                               ' svi gpio su izlazni
  TRISIO.ANS3 = 1                          ' pin ANS3 je ulazni
  ADCON0.VCFG = 0                          ' Vdd as Vref
  gpio = %00000000                         ' gasimo sve izlaze

  while true                               ' beginning of a endless loop
         ad_tmp = ADC_read(ANS3)           ' citamo vrijednost sa porta GP4 i rezultat smjestamo u temp
         if is_error = 0 then              ' provjeravamo jeli napon u granicama dozvoljenog
            set_voltage                    ' podesavamo releje
         end if                            '                               '
  wend                                     ' endless loop
end.


I još jedno pitanje. Kada je napon primara između 179 i 181 V tada led diode na GP1 i GP2 svijetle. Palo mi je na pamet da čitam stanje a/d pina nekoliko puta sa pauzama pa da uzmem srednju vrijednost, ili da samo napravim pauzu posle čitanja. Ili nešto treće?

Program je u MikroBasic Pro-u i testiran na EasyPic5.


[Ovu poruku je menjao deniah dana 21.03.2010. u 02:11 GMT+1]

[Ovu poruku je menjao deniah dana 21.03.2010. u 02:15 GMT+1]
[ rsinisa @ 21.03.2010. 08:40 ] @
Odgovori šta ti znači ovo:
Citat:
E sad to radi na razvojnoj ploči ali kad priključim van razvojne ploče neće.

Šta to priključiš van razvojne ploče? Neki spoljni napon koji meriš? Ako je to, onda možda nisi spojio masu razvojne ploče i masu spoljnog napona.

A ne radi ti merenje na AN3 jer nisi rekao PIC-u da ti je AN3 aktivan. (Čitati, čitati i samo čitati - registar ADCON0). Ne vidim ni da si podesio ANSEL registar.
Sledeće što mi nije jasno je koji će pin da se aktivira kada su ti naponi tačno 220, 180 i 160V. Mislim, zauzeće svakako neko stanje koje je postavljeno prethodno izmerenim naponom, ali teoretski ako ti je napon u startu stabilan i iznosi npr. tačno 200V, neće ti biti setovan ni jedan pin.
To što ti se uključuju istovremeno dve LED znači da mereni napon šeta u granicama uključenja obe LED što znači da napon zaista šeta ili da nije dobro filtriran. Možeš da probaš sa povećanjem ELKO-a posle greca, dodavanjem kondenzatora na AN3 prema masi, ili sa usrednjavanjem napona kako je objasnio Šćepa u jednoj temi pre nekog vremena, a to je:
Citat:
Malko matematike, produzeno vreme merenja, usrednjavanje sa metodom FIFO,...

Pozdrav.
Sinisha

[ deniah @ 21.03.2010. 18:00 ] @
Dakle da pojasnim. Povezao sam na proto ploči elemente po gornjoj šemi. Napajanje ide preko trafoa 230/12V koji sam opet uključio u auto trafo. Kada smanjujem napon (preko auto-transformatora), na pinu 3 kontrolera (AN3) bi trebalo da mjerim napon od 2.37V do 3.72V za promjenu napona primara od 160V do 240V. Međutim tu je uvijek 0V. Ako za A/D koverziju koristim pin 7 (liniju TRISIO.ANS3 = 1 promijenim u TRISIO.ANS0 = 1 i ad_tmp = ADC_read(ANS3) u ad_tmp = ADC_read(ANS0)), a led diodu prebacim na pin 3 (takođe liniju gpio = %00000001 promijenim u gpio = %00010000), tada sve radi kako treba. Naponi na AN0 se mijenjaju zavisno od napona na primaru i led diode reaguju.

Tačno je da datašit od 12F675 nisam proučio. Dio koda:
Code:

main:
  GPIO = 0                                 ' inicijalizacija GPIO porta
  CMCON = 7                                ' gasimo komparatore
  TRISIO = 0                               ' svi gpio su izlazni
  TRISIO.ANS3 = 1                          ' pin ANS3 je ulazni
  ADCON0.VCFG = 0                          ' Vdd as Vref

sam prepisao iz mikroelektronikinog primjera za A/D koverziju sa 16F675.

Sinoć sam uradio čitanje na AN0 ovako:
Code:

sub procedure read_ad
    dim i as byte
    for i = 0 to 9
       ad_tmp = ad_tmp + ADC_read(ANS0)  
       delay_ms(50)
    next i
    ad_tmp = ad_tmp / 10
end sub

Na razvojnoj ploči radi dobro. Sjutra cu na proto ploču staviti kondenzator kako ste predložili i probati dali će se na prelazu napona paliti dvije led.

Još samo da pojasnim da se napon na analogni pin na razvojnoj ploči dovodi preko trimera 10KOhm koji je vezan jednim krajem na +5V, drugim na masu a klizač ide na mcu.
[ rsinisa @ 21.03.2010. 18:58 ] @
Za AN3 sam ti rekao zašto ti ne radi. A primer od jednog kontrolera ne mora da znači da će da radi i na drugom, pogotovo ako je iz druge familije. Uspeh programiranja PIC kontrolera leži upravo u čitanju tehničkih podataka i pravilnom podešavanju svih relevantnih registara specijalne namene (SFR registri). Bolje utrošiti ceo dan na čitanje literature nego se nervirati i pitati zašto nešto ne radi, pa posle još čekati na odgovor. Čitati, čitati i samo čitati ;).

Pozdrav.
Sinisha