forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
PIC16F88-AD převodník-změna napětí způsobí přeblikávání LED
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 25 březen 2010, 7:22    Předmět: Citovat

Takze za to muze potak JooO ? rozmontovat mrtvy !
aspon ze tak Cool

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Anonymní






PříspěvekZaslal: 18 prosinec 2010, 11:56    Předmět: Citovat

poradí tu někdo?
Návrat nahoru
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 18 prosinec 2010, 13:10    Předmět: Citovat

polozi tu nekdo otazku ?
_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Anonymní






PříspěvekZaslal: 18 prosinec 2010, 14:17    Předmět: Citovat

Zdarec určitě ano su rad že se někdo ozval chtěl bych trochu poradit s AD převodníkem u 16F88 přes AN1 a AN0 snímám napětí na potenciometrech zapojených jako děliče napětí problém mám vtom že se mě navzájem ovlivňují referenční napětí mám Vdd napájení procesoru je 3.3V
Návrat nahoru
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 18 prosinec 2010, 14:34    Předmět: Citovat

obcas by neuskodila carka ci tecka . v tomto tematu si myslim je maximum k AD prevodniku . skontroluj si spravne prepinani kanalu , dodrzeni cekacich casu mezi prepinanim kanalu / spousteni AD prevodu atd. mas tu funkcni kody tak si je pornvnej s tim tvym . jinak bez tveho kodu ti moc neporadime
_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Petr
Profesionál
Profesionál


Založen: 21.2.2008
Příspěvky: 645
Bydliště: Praha západ Hostivice

PříspěvekZaslal: 18 prosinec 2010, 17:53    Předmět: Citovat

MiloPS3 napsal:
obcas by neuskodila carka ci tecka .


Si mě pobavil, tobě chybějí i háčky.
Já vím, měl jsi na mysli oddělovací čárku a tečku na konci věty, je tak? Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 18 prosinec 2010, 19:34    Předmět: Citovat

Ano měl sem na mysli interupční znaménka, psát s hačkama a čárkama je pro me oprus
me dostalo prave tohle
Anonymous napsal:
problém mám vtom že se mě navzájem ovlivňují referenční napětí mám Vdd napájení procesoru je 3.3V
proto sem tak reagoval Smile ...
_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
B0sc0
Profesionál
Profesionál


Založen: 28.1.2011
Příspěvky: 225
Bydliště: Absurdistán nebo Banánová republika

PříspěvekZaslal: 29 prosinec 2011, 9:12    Předmět: Citovat

Tudle jsem to zkoušel v C je to pro 16f690, tak kdyby někdo potřeboval pro inspiraci. Budu rád, když se k tomu vyjádří i někdo zkušenější, funguje to, ale udělat se dá všechno lépe Smile
kód:

#define _XTAL_FREQ 4000000
#include <htc.h>

unsigned char aaa;

void init()
{
   T2CON = 0b01001100; //nastavení časovače
   TMR2IE=1;
   PEIE=1;
   GIE=1;
   TMR2IF=0;   
}

void ADint()
{
   TRISC= 0b00000000;
   TRISA= 0b00000100;
   ANSEL= 0b00000100;   // nastavení pinu RA2 jako analog (1)
   ADCON0=0b00001000;   // (0<<CHS0)|(1<<CHS1)|(0<<CHS2)|(0<<CHS3)|(1<<ADON);
   ADCON1=0b00110000;   //(1<<ADCS2)|(0<<ADCS1)|(1<<ADCS0);
   
}

unsigned char prevod()
{   
      unsigned char hodnota;
      ADON=1;   // zapnutí převodníku
      GODONE=1;   //zapnutí převodu

      while(GODONE);
      
      hodnota=ADRESH;
      
      return hodnota;   
}



void main (void)
{
   ADint();

   while(1)
   {
   aaa=prevod();
   __delay_ms(10);

   if(aaa <= 256 & aaa >= 224)
          PORTC = 0b11111111;
   if(aaa <= 223 & aaa >= 192)
          PORTC = 0b01111111;
   if(aaa <= 191 & aaa >= 160)
          PORTC = 0b00111111;
   if(aaa <=159 & aaa >= 128)
          PORTC = 0b00011111;
   if(aaa <= 127 & aaa >= 96)
          PORTC = 0b00001111;
   if(aaa <= 95 & aaa >= 64)
          PORTC = 0b00000111;
   if(aaa <= 63 & aaa >= 32)
          PORTC = 0b00000011;
   if(aaa <= 31 & aaa >= 6)
          PORTC = 0b00000001;
   if(aaa <= 5 & aaa >= 0)
          PORTC = 0b00000000;

   }   
}

_________________
MPLAB + HI-TECH + PICKIT2
Zatím jenom amatér Smile a asi i navždy
SMT technolog+vše okolo LED modulů
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Atlan
Profesionál
Profesionál


Založen: 4.2.2009
Příspěvky: 969

PříspěvekZaslal: 29 prosinec 2011, 11:18    Předmět: Citovat

da ssa to napisat aj bez <= => len s < > ale ci to uspori nejaky kod neviem.
samozrejme krajne polohy by mali bt s rovnasa.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
frijolero
Přispěvatel
Přispěvatel


Založen: 6.11.2011
Příspěvky: 20
Bydliště: Vendryně

PříspěvekZaslal: 15 březen 2012, 18:55    Předmět: Citovat

Zdravim panove,

mam problem, na ktery jsem kratky. Pouzivam PK3, 16f872 a hi-tech lite. Na LCD zobrazuji 10b hodnotu ze vstupu AN0 (0 az 5V). Cisilka skacou pekne od 0 az do 1023, ale v jednom intervalu visi na hodnote 256 (od hodnoty cca 169 do tech 256)a to odpovida napetim cca 0,75V az cca 1,15V. Proste v tomhle intervalu napeti na RA0 je vystup na konstantni hodnote 256. A mimo tenhle interval to chodi jak ma. Za kazdou radu dik.



16f872cele.c
 Komentář:
Prikladam zdrojak, je to ze 3i souboru - proto ty delici carky.

Stáhnout
 Soubor:  16f872cele.c
 Velikost:  2.2 kB
 Staženo:  313 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
frijolero
Přispěvatel
Přispěvatel


Založen: 6.11.2011
Příspěvky: 20
Bydliště: Vendryně

PříspěvekZaslal: 15 březen 2012, 21:45    Předmět: Citovat

heh, tak jsem na to prisel. Problem byl ve spatnem casovani prevodu. Zmenil jsem z fosc/2 na fosc/8 a je to ok Cool .

Nevedel by nekdo proc se to projevilo jen v tomhle intervalu ? Mel jsem za to, ze kdyz je spatny cas prevodu tak to ukazuje nesmysly v celem rozsahu nebo alespon od nejakeho cisla po nektery kraj rozsahu. Ale uprostred?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Krtek
Anonymní





PříspěvekZaslal: 24 únor 2013, 14:53    Předmět: Citovat

Měl bych prosbu, číst AD převodník v pohodě umím, odesílat data na displej taky pomocí I2C taky, ale narazil jsem na to, že když něco změřím AD převodníkem, tak se mi to uloží do ADRESH (jen 8 bitů, pro mou aplikaci stačí), na vstupu mám dělič třemi, takže měřím napětí v rozsahu 0-15V no a nevím, jak na displej dostat hodnotu napětí v čitelné formě a né v binární 0-255, potřeboval bych to s přeností na jedno desetinné číslo, takže např 14,5V (jelikož budu zobrazovat vždy 3 číslice, tak jsem si představoval, že bych měl v jednom registru 0-150 a to by ukazovalo napětí).

Ať přemýšlím, jak přemýšlím, tak nevím jak to udělat v ASM na 8- bitech:( poradíte někdo? (už hledám od rána po netu a všude nacházím řešení v C, což neumím)
Návrat nahoru
 

 
Panda38
Profesionál
Profesionál


Založen: 18.9.2012
Příspěvky: 409
Bydliště: Praha, Most

PříspěvekZaslal: 24 únor 2013, 15:31    Předmět: Citovat

Při přepočtu můžeš uvažovat např. takto:

Potřebuješ převést číslo x = 0..255 na y = 0..150. Teoreticky to znamená y = x / 255 * 150. Ale protože počítáš v celých číslech, budeš počítat s číslem * 256, aby byla hodnota v horním bajtu výsledku. Což znamená y = x * (256/255*150) = x * 151. Pokud není k dispozici hw násobička, tak lze číslo převést sčítáním binárních zlomků - tj. násobení *151 je stejné jako sečíst x + (x<<1) + (x<<2) + (x<<4) + (x<<7). Sčítá se 16bitově, výsledek je v horním bajtu. ... Jiná možnost by byla převod tabulkou s 256 položkami.

Z převedeného čísla (=napětí v desetinách V) lze jednotlivé číslice získat dělením 100 a pak 10. Namísto dělení lze opět použít násobení s vyšším rozsahem, ale tady bude možná vhodnější převod odečítáním - nejdříve odečítat 100 (dokud je číslo >= 100), tím se zjistí 1. číslice, pak odečítat 10 ke zjištění 2. číslice a zbytek je 3. číslice.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Anonymní






PříspěvekZaslal: 24 únor 2013, 16:10    Předmět: Citovat

skvělé, vůbec mě nenapadlo násobit do 16bitů, vynásobil jsem to tedy 151 a je to skvěle funkční, moc děkuji Exclamation
Návrat nahoru
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip Časy uváděny v GMT + 2 hodiny
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6
 
Strana 6 z 6
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Copyright © 2020 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora.