Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   78 / 118
(#) vilmosd válasza Gyimate hozzászólására (») Jún 18, 2012 /
 
Nalam ugy szokott lenni, hogy TMR0 IT szamol 200-500 mS ideig, es bebillent egy jelzobitet. Amikor van jelzobit kiolvasom az AD-t, majd valtom a csatornat, es torlom a jelzobitet. Ezt csinalom a kivant csatornaszamig, majd kezdem elolrol. Gondolom nem olyan folyamatot mersz amit 10 mS idonkent kell leolvasni. A meresi eredmenyt en egy tombben tarolom, aminek az indexe ugyanaz, mint a csatorna index. Ja meg annyit hogy az AD bemenetet en egy 1k, 100nF RC taggal szoktam szurni. Az R soros a feszforrassal, a C a lab es a GND koze. Ez annyiban is segit, hogy az AD mintavetelkor kis forrasellenallast fog latni.
(#) Gyimate válasza vilmosd hozzászólására (») Jún 18, 2012 /
 
Adtál egy jó ötletet az előbb, eddig úgy csináltam, hogy közvetlenül a port kiolvasása előtt állítottam át a csatornát, és ez volt a baj, most leolvasom az egyik analóg bemenetet, majd ezután csatornát váltok, és így várok pár ms-ig, így már minden gond nélkül kiolvassa az adatot. Kösz a segítséget!
(#) vilmosd válasza Gyimate hozzászólására (») Jún 18, 2012 /
 
Ja jobban megneztem most a forrast. Haaat.. Az elso: Te beallitittad az AD-t 8 bitesre, erre van 2 16 bites valtozod, ahova beolvasod. Vagy az AD 10 (16) bites, vagy a valtozo 8 bites. Masodik: Az AD beallitashoz az includeban megtalalhatok a szabvany def-ek, amire hallgat a fordito.
  1. // Constants used in SETUP_ADC_PORTS() are:
  2. #define NO_ANALOGS                           7    // None
  3. #define ALL_ANALOG                           0    // A0 A1 A2 A3 A5 E0 E1 E2
  4. #define AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF 1    // A0 A1 A2 A5 E0 E1 E2 VRefh=A3    
  5. #define AN0_AN1_AN2_AN3_AN4                  2    // A0 A1 A2 A3 A5          
  6. #define AN0_AN1_AN2_AN4_VSS_VREF             3    // A0 A1 A2 A4 VRefh=A3              
  7. #define AN0_AN1_AN3                          4    // A0 A1 A3
  8. #define AN0_AN1_VSS_VREF                     5    // A0 A1 VRefh=A3
  9. #define AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF 0x08    // A0 A1 A5 E0 E1 E2 VRefh=A3 VRefl=A2    
  10. #define AN0_AN1_AN2_AN3_AN4_AN5           0x09    // A0 A1 A2 A3 A5 E0        
  11. #define AN0_AN1_AN2_AN4_AN5_VSS_VREF      0x0A    // A0 A1 A2 A5 E0 VRefh=A3          
  12. #define AN0_AN1_AN4_AN5_VREF_VREF         0x0B    // A0 A1 A5 E0 VRefh=A3 VRefl=A2          
  13. #define AN0_AN1_AN4_VREF_VREF             0x0C    // A0 A1 A4 VRefh=A3 VRefl=A2              
  14. #define AN0_AN1_VREF_VREF                 0x0D    // A0 A1 VRefh=A3 VRefl=A2
  15. #define AN0                               0x0E    // A0
  16. #define AN0_VREF_VREF                     0x0F    // A0 VRefh=A3 VRefl=A2

Harmadik : a [/code] lcd_putnum (Anal1);
lcd_gotoxy (1,2);
lcd_putnum (Anal2);
delay_ms (20);
lcd_putc ("\f");
  1. helyett talan a helyes igy lenne:
lcd_putc ("\f");
lcd_putnum (Anal1);
lcd_gotoxy (1,2);
lcd_putnum (Anal2);
delay_ms (20);
[code=c] Igy eloszor torlod a kepernyot, kiirod az eredmenyt, es a kovetkezo ciklusig igy marad a kep.
(#) vilmosd válasza vilmosd hozzászólására (») Jún 18, 2012 /
 
Mar nem sikerult javitani, de remelem latszik a lenyeg. Szolj ha nem ertem, majd ujra leirom a veget.
(#) Gyimate válasza vilmosd hozzászólására (») Jún 18, 2012 /
 
Köszönöm mindenkinek, most már rendesen működik!
(#) Master_of_the_web válasza Hp41C hozzászólására (») Jún 20, 2012 /
 
Helló!

A megbízhatóság érdekében változtattam a mérés mikéntjén. Mivel PWM-el generált áram méréséről van szó, egy R-C szűrővel megoldottam, hogy a mérést bármikor végre lehessen hajtani amikor épp van rá idő. Így jelenleg csak egyetlen egy megszakítás van a programban ez pedig az SSP -hez tartozik. A mérést a főhurokban végzem el.

A baj az, hogy a fagyás még így is megmarad.

A mért adat nem fér bele egy bájtba ezért először szerettem volna egy huzamban egymás után kettőben elküldeni. Igen ám, de a második bájt kiolvasásakor az SSP modul egyszerűen csak lefogja a busz mindkét adatvonalát és többé el sem engedi. A kiolvasás így nem lehetséges.

Így ezután úgy döntöttem, hogy a két bájtot külön-külön megcímezve olvasom ki őket. (természetesen csak akkor mérek újra, ha már mindkettő elment)
Ez így működik, de így is befagy a busz rövid időn belül.

Erre azt a nem túl elegáns megoldást találtam ki, hogy a főhurokban időnként ellenőrzöm, hogy nem alacsony-e esetleg mindkét adatvonal. Ilyenkor nyomok egy SSPEN=0 majd SSPEN=1 -et. Így a busz "életben" marad.
Ez nem jó, mert néha bezavar az adatok fogadásába is, de legalább nem fagy ki emiatt minden.

Valami oka biztos van annak, hogy váratlanul megfagy a busz, de eddig nem jöttem rá. Valami megoldás nagyon jó lenne, mert jelenleg a rádiós kapcsolat is stabilabb mint az vezetékezett I2C.

A teljes slave program:

  1. #include <16F690.h>
  2. #DEVICE ADC=10
  3.  
  4. #fuses RC,NOWDT, NOPROTECT, NOMCLR
  5. #use delay(internal=8M)
  6.  
  7. #use i2c(SLAVE, I2C1, address=0x40, FORCE_HW)
  8. #use rs232(baud=115200, uart1)
  9.  
  10.  
  11. BYTE address, buffer[10];
  12. #bit CKP= 0x14.4
  13. #byte PORTC= 0x05
  14. #bit RC2= PORTC.2
  15. #bit RC4= PORTC.4
  16. #byte SSPCON= 0x14
  17. #byte SSPSTAT= 0x94
  18. #bit SSPOV= SSPCON.6
  19. #bit BF= SSPSTAT.0
  20. #bit SSPEN= SSPCON.5
  21. #byte PIR1= 0x0C
  22. #bit TMR2IF= PIR1.1
  23.  
  24. #byte CCP1L= 0x15
  25. #byte CCP1H= 0x16
  26.  
  27.  
  28. long duty, current, ad_val;
  29. short data_is_sent, master_sending;
  30. //int ;
  31.  
  32. #INT_SSP
  33. void ssp_interupt ()
  34. {
  35.  // disable_interrupts(INT_TIMER2);
  36.  // clear_interrupt(INT_TIMER2);
  37.    BYTE incoming, state;
  38.    
  39.    state = i2c_isr_state();
  40.    
  41.    if(state <= 0x80)                     //Master is sending data
  42.    {
  43.  //  master_sending=1;
  44.    
  45.       incoming = i2c_read();
  46.       if(state == 1)                     //First received byte is address
  47.          address = incoming;
  48.       if(state == 2)                     //Second received byte is data
  49.         buffer[address] = incoming;
  50.        
  51.    //   master_sending=0;
  52.    }
  53.    if(state == 0x80)                     //Master is requesting data
  54.    {
  55.      if(address==2){
  56.      data_is_sent=0;
  57.  //    buffer[2]=(long)((current&0b1111111100000000)>>8);
  58.      i2c_write(buffer[2]);
  59.     }
  60.  if(address==3){
  61. // buffer[3]=(current&0b0000000011111111);
  62.  i2c_write(buffer[3]);
  63.  data_is_sent=1;
  64. }
  65.  
  66.    }
  67.  
  68.    CKP=1;
  69.    
  70. }
  71.  
  72.  
  73. void main(){
  74. long i,temp;
  75. long ad_val;
  76. int i2c_adress;
  77. port_b_pullups(0b00100000);
  78. setup_comparator(NC_NC_NC_NC);
  79. setup_timer_2( T2_DIV_BY_1,63,16);
  80. setup_ccp1(CCP_PWM_FULL_BRIDGE|CCP_PWM_L_H);
  81. setup_adc_ports(sAN5|VSS_VDD );
  82. setup_adc(ADC_CLOCK_DIV_16 );
  83. set_adc_channel(5);
  84. if(input(PIN_B5)) i2c_adress=0x40;
  85. else i2c_adress=0x42;
  86. I2C_SlaveAddr(i2c_adress);
  87.  
  88.  
  89. enable_interrupts(GLOBAL);
  90. enable_interrupts(INT_SSP);
  91.  
  92.  
  93. set_tris_c(0b00000011);
  94. set_tris_b(0b01010000);
  95.  
  96.  
  97. while(1){
  98.  
  99. if(data_is_sent){
  100. ad_val=read_adc();
  101. current=(ad_val*100/33);
  102.  
  103. buffer[2]=(long)((current&0b1111111100000000)>>8);
  104. buffer[3]=(current&0b0000000011111111);
  105.  
  106. }
  107.  
  108. if(!input(PIN_B6)||!input(PIN_B4)){
  109. sspen=0;
  110. SSPOV=0;
  111.   BF=0;
  112.   CKP=1;
  113. //set_pwm1_duty(200);
  114. //delay_ms(20);
  115. //set_pwm1_duty(0);
  116. //delay_ms(1);
  117. sspen=1;
  118. }
  119.  
  120.  
  121. if(bit_test(buffer[0],0)) setup_ccp1(CCP_PWM_FULL_BRIDGE|CCP_PWM_L_H);
  122. else setup_ccp1(CCP_PWM_FULL_BRIDGE_REV|CCP_PWM_L_H);
  123.  
  124. temp=buffer[1];
  125.  
  126. set_pwm1_duty(temp);
  127. /*
  128. printf("duty: %u",buffer[1]);
  129. printf("\n \r");
  130. */
  131. delay_ms(10);
  132. }
  133.  
  134. }


a master ide vonatkozó részei:

  1. #use i2c(MASTER, SCL=PIN_A2, SDA=PIN_A1, FORCE_SW)
  2.  
  3.  
  4. BOOLEAN device_ready(BYTE adress) {
  5.    int1 ack;
  6.    i2c_start();            // If the write command is acknowledged,
  7.    ack = i2c_write(adress);  // then the device is ready.
  8.    i2c_stop();
  9.    return !ack;
  10. }
  11.  
  12. void write_i2c_device(BYTE device_adress, BYTE adress, BYTE data) {
  13.    if(device_ready(device_adress)){
  14.    i2c_start();
  15.    i2c_write(device_adress);
  16.    i2c_write(adress);
  17.    i2c_write(data);
  18.    i2c_stop();
  19.    }
  20. }
  21.  
  22. int read_i2c_device(BYTE device_adress, BYTE adress) {
  23.    int data;
  24.    if(device_ready(device_adress)){
  25.    i2c_start();
  26.    i2c_write(device_adress);
  27.    i2c_write(adress);
  28.    i2c_start();
  29.    if(!i2c_write(device_adress+1)){
  30.    data=i2c_read(0);
  31.    }
  32.    i2c_stop();
  33.    }
  34.    return(data);
  35. }
  36.  
  37. void update_motor(int duty_cycle, int adress, short dir){
  38. long motorcurrent;
  39. if(dir) write_i2c_device(adress,0,1);
  40. else write_i2c_device(adress,0,0);
  41. //delay_ms(1);
  42. write_i2c_device(adress,1,duty_cycle);
  43.  
  44. //printf("Motor current %u: %04.2w A \n\r",adress,motorcurrent);
  45.  
  46. if(adress==0x40){
  47. tx_buf_table[3]=read_i2c_device(adress,2)|0x7f00;
  48. tx_buf_table[4]=read_i2c_device(adress,3)|0x7f00;
  49.  
  50. //motorcurrent=tx_buf_table[3];
  51. //motorcurrent=(long)((motorcurrent<<8)|tx_buf_table[4]);
  52. }
  53.  
  54. if(adress==0x42){
  55. tx_buf_table[5]=read_i2c_device(adress,2)|0x7f00;
  56. tx_buf_table[6]=read_i2c_device(adress,3)|0x7f00;
  57.  
  58. //motorcurrent=tx_buf_table[5];
  59. //motorcurrent=(long)((motorcurrent<<8)|tx_buf_table[6]);
  60. }
  61.  
  62. //printf("Motor current %u: %04.2w A \n\r",adress,motorcurrent);
  63. }
(#) _vl_ válasza Master_of_the_web hozzászólására (») Jún 20, 2012 /
 
Idézet:
„Valami oka biztos van annak, hogy váratlanul megfagy a busz, de eddig nem jöttem rá. Valami megoldás nagyon jó lenne,”

Beindítod debuggerrel, megvárod, míg befagy, megállítod (pause), és kiolvasod a regisztereket a debuggerrel.
Ugyanezt eljátszod a másik oldallal is (feltételezve, hogy nincs két illesztőd, ezért nem tudod egyszerre debuggolni mindkét végét), reménykedve, hogy mindig kb. ugyanazért fagy be.
Ezen a ponton még lehet azzal is kísérletezni, hogy amelyik oldalnál CKP = 0-ban vár, ott nyomsz kézzel egy CKP = 1-et, majd megpróbálod kitalálni, hogy ez honnan hiányzik a kódodból...
(#) Hp41C válasza Master_of_the_web hozzászólására (») Jún 20, 2012 /
 
Szia!

A slave 41. és 53. sora ellentmondásban van.
Egy ötlet:
Mit csinálhat a slave 45. sorában az incoming = i2c_read(); sor? Ha abból indulok ki, ami a masterben van, az i2c_write(device_adress); , akkor megvárja, míg elkészül a vétel és kiolvassa a SSPBUF regisztert. Cseréld ki incoming = SSPBUF; sorra.
(#) silent15 hozzászólása Jún 21, 2012 1 /
 
Sziasztok, eltudnátok küldeni a teljes progit az emailcímemre?? (profilomban benne van) , vagy ha feltöltitek valahova az is jó!

Köszi!
(#) brumibali hozzászólása Jún 25, 2012 /
 
sziasztok
segitsetek lécci hogy mértnem tudom a ra0-án ,mérni a potit, és azt kiirni lcdre? Köszönöm


#include <16F690.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset


#use delay(clock=4000000)
#ZERO_RAM

#include



//======================================
//Változók dekralálása
//======================================

float volt=0 ;

void main()
{


setup_adc_ports( RA0 );
set_tris_a(0b00000001);
setup_adc(ADC_CLOCK_INTERNAL );




// setup_adc_ports(AN0);
// setup_vref(FALSE);

//lcdinit

delay_ms(2000);
output_high(PIN_A0);
output_low (LCD_RW);//LCD_RW lehúzás testre
delay_us(2);
lcd_init();
delay_us(20);

printf(lcd_putc, "\fABCDEFGHIJKLMNOPQRST");
printf(lcd_putc, "\nabcdefghijklmnopqrst");
printf(lcd_putc, "\n12345678901234567890");
printf(lcd_putc, "\n!@#$^&*(){}[]:;<>?/=");
delay_ms(3000);
printf(lcd_putc, "\f");

//==============================================================
//főpprogram innen indul
//==============================================================

while(1)
{
set_adc_channel(0);
delay_us(100);
volt=(read_adc());
setup_adc( ADC_OFF );
printf(lcd_putc,"A/D volt = %2x\n\r", volt);
delay_ms(2000);
}
}//end main
(#) horcsab válasza brumibali hozzászólására (») Jún 25, 2012 / 1
 
A volt ne float, hanem int8 legyen.
Valamint, az AD-t nem muszáj kikapcsolni.
(#) sysy válasza brumibali hozzászólására (») Jún 25, 2012 / 2
 
Hát, ez tényleg nem fogja megmérni a potidon levő feszejt. A fordító nem anyázódott? Mert van néhány szintaktikai hiba, ami miatt le sem kellene fordulnia.
pl. #include itt mit akartál includézni?
vagy a volt=(read_adc()) itt kicsit sok a zárójel.
Meg néhány szemantikai probléma is van. Az RA0 lábat mintha LCD vezérlésre használnád, mert az LCD ini előtt magasra állítod a kimenetet output_high(PIN_A0). El kellene dönteni, hogy analog, vagy digitális láb lesz, azon belül bemenet, vagy kimenet. Nem mindegy! A comparátort le kellene kapcsolni az RA0 lábról, az ADC-t még el sem indítottad és máris lekapcsoltad (örökre).
Hirtelen ennyit látni a programodból.

CCS Reference Manual 2011, july.

Hogy segítsek is egy kicsit:
CCS 4.128 vagy ujabb feltételezve.
ezzel a néhány sorral inicializáld az ADC-t.


  1. setup_comparator(NC_NC_NC_NC);
  2.         setup_adc(ADC_CLOCK_INTERNAL);
  3.         setup_adc_ports(sAN0);
  4.         set_adc_channel(0);


A mainban már csak
volt=read_adc();
kell.

Sok szerencsét.
(#) sysy válasza horcsab hozzászólására (») Jún 25, 2012 /
 
Az int sem jó a voltnak, mert 10bit nem fér bele a 8bitbe.
Inkább long legyen az. Utána ha nagyon lebegőpontosan akarja használni lehet castolni.
(#) sysy válasza sysy hozzászólására (») Jún 25, 2012 /
 
Bocsánat, most látom, hogy csak 8 bitesnek használja az ADC-t.
(#) brumibali válasza sysy hozzászólására (») Jún 26, 2012 /
 
hi
köszi, de igyse műkzik.. random számokat dobál csak fel a potiállástól függetlenül...
Lcd-n longot nem birok kiíratni.
Az include után lemaradt az lcd behivása bocsi, az alap progiba benne van.
most igy néz ki a javításokkal a progi:

  1. #include <16F690.h>
  2. #device adc=8
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
  5. #FUSES NOCPD                    //No EE protection
  6. #FUSES NOPROTECT                //Code not protected from reading
  7. #FUSES NOMCLR                   //Master Clear pin used for I/O
  8. #FUSES PUT                    //No Power Up Timer
  9. #FUSES NOBROWNOUT               //No brownout reset
  10.  
  11.  
  12. #use delay(clock=4000000)
  13. #ZERO_RAM
  14.  
  15. #include <Flex_LCD420.c>
  16.  
  17.  
  18.  
  19. //==============================================================
  20. //Változók dekralálása
  21. //==============================================================
  22.  
  23. int volt=0 ;
  24. //==============================================================
  25. //Változók dekralálás vége
  26. //==============================================================
  27.  
  28.  
  29.  
  30. void main()
  31. {
  32.  
  33. setup_comparator(NC_NC_NC_NC);
  34.         setup_adc(ADC_CLOCK_INTERNAL);
  35.         setup_adc_ports(sAN0);
  36.         set_adc_channel(0);
  37.  
  38. delay_ms(2000);
  39. output_low (LCD_RW);//LCD_RW lehúzás testre
  40. delay_us(2);
  41. lcd_init();
  42. delay_us(20);
  43.  
  44.  printf(lcd_putc, "\fABCDEFGHIJKLMNOPQRST");
  45.  printf(lcd_putc, "\nabcdefghijklmnopqrst");
  46.  printf(lcd_putc, "\n12345678901234567890");
  47.  printf(lcd_putc, "\n!@#$^&*(){}[]:;<>?/=");
  48.  delay_ms(3000);
  49.  printf(lcd_putc, "\f");
  50.  
  51.  
  52.  
  53. //==============================================================
  54. //főpprogram innen indul
  55. //==============================================================
  56.  
  57.  
  58.  
  59. while(1)
  60. {
  61. delay_us(100);
  62. volt=read_adc();
  63. //printf(lcd_putc,"A/D volt = %2x\n\r", volt);
  64. printf (lcd_putc,"-%u",volt);  
  65. delay_ms(2000);
  66. }
  67.  
  68.  
  69.  
  70. }//end main
(#) horcsab válasza brumibali hozzászólására (») Jún 26, 2012 / 1
 
Ezt ne használd így:

setup_comparator(NC_NC_NC_NC);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(sAN0);
set_adc_channel(0);

Hanem:

setup_comparator(NC_NC_NC_NC);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(sAN0);


A főprogramban pedig:

set_adc_channel(0);
delay_us(100);
volt=read_adc();
printf (lcd_putc,"-%u",volt);
delay_ms(2000);


És jó lenne tudni, hogy az LCD melyik lábakra van bekötve.
(#) brumibali válasza horcsab hozzászólására (») Jún 26, 2012 /
 
Köszönöm szépen a segitséget mindenkinek, mellédugtam a próbanyákon az ellenálást:S és a picit2-tőt mérte..
köszönöm mégegyszer
(#) sysy válasza horcsab hozzászólására (») Jún 26, 2012 /
 
Miért ne használja úgy, ahogy ajánlottam és miért jobb a te megoldásod. Komolyan érdekelne, mert magyarázatot nem fűztél hozzá.
(#) horcsab válasza sysy hozzászólására (») Jún 26, 2012 / 1
 
CCS -el szívtam emiatt. Bugos volt a progi. Viszont ha így konfigoltam fel akkor tökéletes volt. Mellesleg ha több A/D bemenetet használsz látod hol nyitod meg.
Ebben az esetben viszont mindegy.
(#) brumibali válasza sysy hozzászólására (») Jún 26, 2012 /
 
Ezen ne vesszetek má össze.. a második verzzi letisztultabb amugy.. Köszönöm mindkettőtőknek!
(#) brumibali hozzászólása Jún 26, 2012 /
 
Hogy tudom ugyanazzel a progival a pontos feszültséget kiiratni? ha 5 volt a referencia(tápfesz) 2 tizedesjegyre kéne lécci
köszönöm
(#) vilmosd válasza brumibali hozzászólására (») Jún 26, 2012 /
 
A 8 bites AD felbontasnal, 5 volt Vref-nel az egy lepes az 19,6 mV, 10 bites felbontas eseten 4,88 mV. Tehat ez a maximalis felbontas amit a PIC belso AD-vel el tudsz erni. Persze jobb lenne egesz ertekkel szamolni, pl a Vref 5,12 V, mert igy egy AD osztas (10 bites) 5 mV. A PIC elviseli a 5,12 Volt tapot, tehat ez is mehetne. A program valahogy igy nezne ki (csak a lenyeg):
  1. float32 volt, m;
  2. unsigned int16 result;
  3. .
  4. .
  5. .
  6. m= 5.0/1024.0; // one div by 5 Vref
  7. setup_adc_ports(sAN0|VSS_VDD);
  8. setup_adc(ADC_CLOCK_DIV_32);
  9. set_adc_channel(0);
  10. .
  11. .
  12. .
  13. result=read_adc( );
  14. volt=result*m;
  15. .
  16. .
  17. printf(lcd_putc,"\f %4.2g V",volt);
  18. .
  19. .
A "m" valtozo erteke fugg a Vref-tol, es az AD felbontasatol.
(#) sysy válasza brumibali hozzászólására (») Jún 27, 2012 /
 
Dehogy veszekszünk!
Csak érdekelt volna, hogy az ő megoldása mennyivel jobb, gyorsabb, kényelmesebb az általam ajánlottnál. Nem szégyen tanulni, ha tényleg valami megmagyarázza, hogy így kell csinálni.
(#) Hp41C válasza vilmosd hozzászólására (») Jún 27, 2012 /
 
Szia!

Idézet:
„Tehat ez a maximalis felbontas amit a PIC belso AD-vel el tudsz erni.”


Ha a mérendő jelhez 1 lsb amplitúdójú, 0 várható értékű zajt keverünk, a AD mérési értékeit átlagoljuk, a felbontáson javíthatunk.

Ez ugyan Atmel leírás, de alkalmazható más kontrollerekre is.
(#) sysy válasza Hp41C hozzászólására (») Jún 27, 2012 /
 
Van egy másik metódus a felbontás növelésére, az oversampling. Erről viszont nem találtam megfelelő leírást, vagy csak nem tudtam a kulcsszót rendesen megadni a googlenak. Erről tudsz valami infót?
(#) icserny válasza sysy hozzászólására (») Jún 27, 2012 /
 
Idézet:
„Van egy másik metódus a felbontás növelésére, az oversampling.”
Ez ugyanaz, mint amit Hp41C kolléga említett, és belinkelt.
(#) sysy válasza icserny hozzászólására (») Jún 27, 2012 /
 
Na, akkor mégegyszer elolvasom, kissé jobban odafigyelve az a doksit. Köszi mindenkinek.
(#) vilmosd válasza Hp41C hozzászólására (») Jún 27, 2012 /
 
Biztos jo lehet, de a kolleganak egyenlore a sima egyszeru AD->Volt konverzio jelenti a fo problemat nem az oversampling.
(#) sysy válasza vilmosd hozzászólására (») Jún 27, 2012 /
 
Ráadásul még a 10 bites felbontást is levette 8 bitesre.
(#) Gyimate hozzászólása Júl 3, 2012 /
 
Sziasztok!

Megint írok nektek, mert szeretném megkérdezni, hogy a CCS C fordítóhoz kellene lennie egy EX_FAT.c nevű példaprogramnak, ez benne van a nem teljes verzióban is? Valamilyen okból nekem nincs benne az examples mappában...
A válaszokat köszönöm!
Következő: »»   78 / 118
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem