Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Primer slanja i prijema bajta

[es] :: Elektronika :: Mikrokontroleri :: Primer slanja i prijema bajta

[ Pregleda: 3244 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Primer slanja i prijema bajta23.09.2013. u 22:22 - pre 127 meseci
Vec neko vreme skupljam informacije kako bih najlakse napravio ovo sto pokusavam.
Naime, meni je potrebno da mikrokontroler sa npr. nozice 3 salje neki bajt (negde) dok istovremeno na npr. nozici 4 registruje taj isti bajt koji preko ostatka kola dolazi do njega.
U trenutku registrovanja i sve dok postoji ocitavanje na cetvrtoj nozici peta nozica salje neki drugi bajt....

Mislim da sam dobro postavio pitanje.

Malo sam noviji u ovim stvarima.
Umesto PIC-a (na slici), mogao bih da koristim i ATtiny26L






CyberDjomla
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Primer slanja i prijema bajta23.09.2013. u 22:59 - pre 127 meseci
Ajde preformuliši TAČNO šta 'oćeš. Iz ovoga što si napisao ni od negde ni do nigde nisam razumeo, a predpostavljam ni ostatak ovdašnjeg auditorijuma nije razumeo.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Primer slanja i prijema bajta24.09.2013. u 02:22 - pre 127 meseci
da posaljes bajt gde/kako/kome? preko seriskog porta? preko 1wire? preko
i2c? preko usb...?!?!

vecina mcu-a ima seriski port na sebi i najlakse je "slanje bajtova"
koristeci taj seriski port. noge (osim u retkim slucajevima) ne biras
vec koristis onu nogu koja je vezana za hw uart na samom mcu. mozes i
softwerski da to radis mada je glupo ...

to mu obicno izgleda kao

while(1) if (NOGA1) serial.send('1') else if (NOGA2) serial.send('2')
else if (NOGA3) serial.send('3');
 
Odgovor na temu

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Re: Primer slanja i prijema bajta24.09.2013. u 08:00 - pre 127 meseci
hocu da trojku posaljem na infrared i kad se odbije od katadioptera vraca se na pin 4 koji samo prepozna te impulse. Znaci ono sto je izaslo na trojci da prepozna cetvorka.
Zasto bajt da saljem (povorku od osam stanja)? Bas iz razloga ako stavim bilo koji IR prijemnik koji radi na 36KHz ili 38KHz moze biti ometen u radu npr. obicnim daljinskim i onda nisam dobio nista.


Sve dok cetvorka prepoznaje trojku, PIC sa pina br 5 salje (drugi bajt) na RF koji ce posle tamo neko drugo kolo na sedam metara da prepozna i ukljuci rele (taj deo je sad manje bitan).




CyberDjomla
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Primer slanja i prijema bajta24.09.2013. u 12:34 - pre 127 meseci
ne radi se to tako, ako ces da saljes preko IR moras da koristis neki
self kloking protokol, na primer manchester, ako neces da modulises
signal ne moras ali onda moras da radis extremno sporo inace nista od
prijema ... sta je poenta? presecanje zraka za neki detektor prolaska
ili lociranje necega ili merenje udaljenosti od necega? obrati paznju da
je IR "vrlo odbiiv" tako da ces da imas gzilion signala kada posaljes
taj tvoj, reci sta je cilj projekta pa ti verovatno kazemo koji je nacin
da se to izvede
 
Odgovor na temu

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Re: Primer slanja i prijema bajta24.09.2013. u 16:40 - pre 127 meseci
Bas kako si i rekao detektor prolaska (pored rampe). Nista specijalno.
Kad prodje pored rampe sa katadiopterima na izlazu br 5 izbaci novi signal koji saljem preko RF.
Znam da se mora sa malim brzinama. Ne znam da li bi to moglo na oko 200KHz.
CyberDjomla
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Primer slanja i prijema bajta24.09.2013. u 16:57 - pre 127 meseci
na 200kHz nije "mala brzina" :D :D :D

vidi sta je fora, ako neces da pravis modulaciju to ti je dosta velika
zezancija, tj bez modulacije to skoro da nema sanse da radi stabilno.

e sad, sa modulacijom imas 2 varijante
- da pravis sam demodulator
- da uzmes gotov demodulator

modulaciju radis sam, to je pdim

e sad, ako ces da uzimas gotov demodulator, to znas i sam, imas na 38 i
40kHz da kupis rc risivere sa demodulatorom. To uopste nije losa sprava
ti saljes modulisano datu i primas nazad i to radi super. Obican
daljinac ne moze da ti uleti u smislu da on ne moze da posalje tvoj kod.
E sad sto se tice ometanja kao takvog daljinac sa ir ledarom ce ti uneti
smetnje kako god okrenes i proci kroz te smetnje je mega zeznut posao
kako god okrenes

ako pravis svoj demodulator mozes da biras koja ti je noseca frekvencija
i time malo povecavas otpornost na sum, na zalost prilicno malo
povecavas otpornost na sum tako da uz dodatnu komplikaciju (hw ili sw za
demodulaciju) ne dobijas mnogo sta

fora je da ti pustis signal, ako dobijes to nazad znas da nemas
prepreku, ako ne dobijes to nazad ili je prepreka ili te neko ometa ..
koliko ti je bitno da li te neko ometa ili je prepreka? za alarmni
sistem npr to je potpuno nebitno posto dal je prepreka ili ometac ti
svakako trigerujes alarm, takodje, cak i ako ti stize to sto ti saljes,
npr ti saljes 0x55, stigne 0x55, ali ako ti stigne sa zakasnjenjem od
100ms znas da nije to to sto si ti poslao vec nesto drugo pa opet
trigerujes alarm

kada su "presecanja" u pitanju ja licno uvek savetujem IC laser i umesto
katadioptera (moze i sa njim) savetujem senzor sa druge strane umesto
katadioptera. senzor uvucem u alu cev plastificiranu u mat hrapavo crno
i unutra i spolja i uvucem senzor skroz duboko u to, na taj nacin ulazni
signal mora da bude tacno u osi sa risiverom inace alu cevka "pojede"
signal tako da uopste nije jednostavno ubaciti se izmedju izvora i
prijemnika (sa ogledalom je mnoooogo lakse haknuti detektor), ista prica
radi i sa IC mada se ic mnogo vise odbija, treba ti nesto da ga
fokusiras .. realno laseri su dolar dva, uber jeftini za to sto ti
treba, njih mozes direkt da modulises (ja sam laserom prenosi 19200 boda
na 5km daljine), uzmes 5mW laser i teras ga sa 2-3mW, ima da traje 100
godina a ako uzmes IC ni ne vidi se :D

ako nemas mogucnost da turis senzor "sa druge strane" onda ti je po meni
mnooogo bolje da umesto IC koristis ultrazvuk, ultrazvucni senzori su
jeftini i laki za koristenje, saljes chipr 20-50 puta u sekundi, ako
nesto prodje detektovaces ga, znaces koliko dugo prolazi i koliko je
daleko od tebe
 
Odgovor na temu

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 14:04 - pre 127 meseci
Ok. Modulator i demodulator nisu problem. Njih ionako moram da postavim na IR pa i na RF i tako dalje.
Svu elektroniku i ostalo mogu sam da napravim.

Mene interesuje najvise to parce koda koje ce da posalje sa nozice tri 0x55. Da prepozna 0x55 na nozici 4.
Ako prepoznavanje postoji onda mi salje sa nozice pet 0x1F.

Da li mi trebaju tajmeri i koliko njih ili nisu uopste potrebni?

Ja sam to zamislio ovako BZV :

Trivijalan primer:
Code:
timer1.timer()
  call signal.send (pin3, 0x55)
end sub

pin4.pin_OnEvent(data)
   if data=0x55 then
     call signal.send(pin5, 0x1F)
   end if
end sub




CyberDjomla
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 16:35 - pre 127 meseci
Lepo ti Bogdan napisao da se izjasniš KAKO hoćeš da šalješ/primaš u isto vreme.
Mikrokontroleri nisu multitasking makine da rade više poslova u isto vreme. (naglasak na ISTO VFERME).
Za ovako nešto što ti 'oćeš mora da koristiš 2 (DVA) kontrolera, jedan na predajnoj strani a drugi na prijemnoj.

To, kako si ti zamislio ne bi ni DYNAMO mogao da izvede.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 16:44 - pre 127 meseci
iskoristis nesto ovako:
http://www.quickbuilder.co.uk/...ester_encoding_using_RS232.pdf
i koristis hw uart na pic-u da saljes i primas,
 
Odgovor na temu

ColdKeyboard
Sasa Karanovic
Hardware and Firmware Engineer
Toronto, Canada

Član broj: 31924
Poruke: 868
*.dynamic.sbb.rs.

Jabber: ColdKeyboard
Sajt: www.SasaKaranovic.com


+11 Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 16:49 - pre 127 meseci
Zavisno od tvog kontrolera, zavisit ce i nacin na koji ces slati/primati te podatke i kojom brzinom.

[word of advice]
Kad ti neko na forumu potrudi se i ispise roman kako nesto moze da se uradi na 10 razlicitih nacina, navede sve njihove prednosti i mane,
i uz to ti ukaze na nedostatke koje ce mozda tvoje resenje da ima i ima zelju da ti pomogne da ih rjesis a od tebe se ocekuje samo da detaljno
opises problem kako bi ti detaljno mogao objasniti resenje. Takve ljude kada ispalis sa odgovorima tipa "Ma Ok, to "znam" nego mene interesuje samo ovo...",
velika je verovatnoca da ti ta osoba vise nece odgovoriti, ne samo na tu temu negu uopste vise na forumu. Jedan po jedan i krenut ce te ljudi izbegavati u sirokom krugu. :)
Umesto toga barem mozes da prokomentarises njegova resenja, da kazes koje je za tebe prihvatljivo koje nije, zasto, ili se barem zahvalis sto je odvojio toliko vremena
da ti napise tako detaljan odogovr, cak i ako nije tacno ono sto si ti trazio. :)
[/word of advice]

Ako ti hardware ima 2 UART-a onda mozes da ih podesis na baud rate koji tebi treba i na RX1 portu osluskujes za taj tvoj 0x55, kada ga dobijes, posaljes sa TX1 0x55 a sa TX2 0x1F.
To je laksa varijanta jer imas i vise nego potrebnog hardware-a i tvoje je samo da ih inicijalizujes i napravis jedan RX interrupt.

Sa jednim UART-om mozes da osluskujes za RX karakter, kada dobijes taj 0x55 na RX pinu, mozes da biras da li ces sa TX pin-a da saljes taj isti karakter ili drugi koji ti treba (0x1F),
zavisno od toga, setujes neki flag tipa SendPending = 1. Poslije u kodu provjeravas da li je taj fleg setovan, ako jeste, pozivas svoju funkciju koja salje 1 po jedan karakter u odredjenom intervalu.


Kod koji bi radio ovu drugu varijantu je recimo sledeci (naravno nema sanse da ce ovo raditi copy&paste jer nije napisano ni za jedan kontroler konkretno, samo ideja)

Code:

unsigned volatile int SendPending = 0;        //Fleg
unsigned volatile int SendCount    = 0;        //Brojac koliko karaktera je poslato
unsigned volatile char SendChar = 0xFF;         // predpostavka da se linija drzi na "1" nivou dok nema karaktera za slanje
unsigned volatile char RXTemp = 0x00;

#define TRIGGERPRIJEM     0x55            //Karakter koji aktivira sekvencu i pokrece slanje istog karaktera 2. uredjaju
#define SLANJE             0x1F            //Karakter koji se salje nekom 3. uredjaju
#define PINX            PORTC.PINC5    //Pin koji se koristi za slanje podataka

//Funkcija za obradu interrupta
void __interrupt__ RX(void) {
    //Primljeni karakter je u RXREG
    INTREG &= ~(1<INTEN)    //Zabrana novih prekida
    RXtemp = RXREG;            //ciscenje registra
    INTREG &= ~(1<<RXINT)    //ciscenje flega za RX interrupt 
    
    if(RXtemp == TRIGGERPRIJEM) {
        TXREG = TRIGGERPRIJEM;    //Slanje istog karaktera 2. uredjaju
        SendChar = SLANJE;        //Inicijalizacija SendChar na karakter koji treba da se posalje
        SendPending = 1;
    }
    
    INTREG |= (1<INTEN)        //Dozvola novih prekida
}


//Funkcija koja obradjuje interrupt nekog tajmera koji je podesen za slanje brzinom koja je potrebna 3. uredjaju
void __interrupt__ Timer1(void) {
    if(SendPending == 1) {
        SendChar = (SendChar>>SendCount);    //Pomeranje SendChar za Count mesta (priprema za slanje bit-po-bit)
        PINX = (SendChar & 0x01);            //Slanje samo LSB-a
        SendCount++;
    }
    //Provera da li je poslato svih 8 bitova, ako jeste, resetovanje u pocetno stanje (cekanje novog TriggerPrijem karaktera)
    if(SendCount >=7) { 
        SendPending = 0; 
        SendChar = 0x00; 
        SendCount = 0;
    }
}


void main() {
    //Inicijalizacija UART-a i Timer-a mora ici ovde
    
    while(1);
}


Naravno ovaj kod je samo primer, nece ti raditi jer svaki kompajler/mikrokontroler ima svoju proceduru kako se inicijalizuju periferije, kako se pisu rutine za obradu prekida, imena registara itd...
Ideja manje vise je kod svih ista. Ako hoces da saljes karakter bit-po-bit sa nekog pin-a, podesis tajmer da ti pravi prekid svakih Xms i unutar tog prekida selektujes koji je sledeci bit za slanje
i postavis ga na taj PIN sa kojeg saljes.

Generalno na forumu nemoj ocekivati da ti neko da kod koji mozes da kopiras u svoj projekat, kliknes compile i on radi. To je medvedja usluga, nista nisi naucio niti razumio i onda opet kad nesto zapne
umjesto da sam izmozgas i prepravis, cimat ces ljude kako ovo kako ono. :)

Pozdrav,
Sale
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 17:37 - pre 127 meseci
@ColdKeyboard:

Njemu trebaju 3 (TRI) UART-a, ili 2 HW i 1 SW UART za želje koje ima.
Prvi, HW, šalje 0b01010101 (0x55), drugi, HW, prima info, i ukoliko je podatak isti kao poslat sa prvog UARTA, bitbang-uje SW, treći, UART prema tamonekomtrećem.
Kada se u čitavu priču uvede IR koji je nosi podatak namodulisan na 36/38/40 kHz, a IR putuke brzinom od cca. 300,000 km/sec, sve želje/čestitke/pozdravi padaju u vodu, čak i da uC radi na ∞ MHz.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

mnn
sm

Član broj: 85435
Poruke: 723
*.dynamic.isp.telekom.rs.



+25 Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 18:46 - pre 127 meseci
Možda bi postavljeni problem mogao rešiti na drugi način i to promenom naslova teme u "primer slanja i prijema bita".Sa jednog pina šalješ jedinicu ili nulu,ostaviš to stanje ,odeš na neki drugi pin i očitaš šta si dobio sa senzora.Ponovo ideš na prvi pin za slanje i sve to ponavljaš dok je potrebno.Naravno moraš taj signal koji je reflektovan nekako i pojačati
E sad ima tu još problema koji te samo čekaju ali oni nisu za forum mikrokontroleri već za elektroniku.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 18:53 - pre 127 meseci
> E sad ima tu još problema koji te samo čekaju ali oni nisu za forum
mikrokontroleri već za elektroniku.

on rece da nema problem da napravi demodulator, da mu je samo ovaj deo
problem .. tako da moze bajtove da salje preko uart-a i da ih prima sa
demodulatora .. jos je lakse da u petlji salje random 0 i 1 i proverava
na drugom pinu dal dobija ono sto je poslao to ce tek tesko neko da mu
spufuje
 
Odgovor na temu

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 19:44 - pre 127 meseci
Citat:
Mikrokontroleri nisu multitasking makine da rade više poslova u isto vreme. (naglasak na ISTO VFERME).
Za ovako nešto što ti 'oćeš mora da koristiš 2 (DVA) kontrolera, jedan na predajnoj strani a drugi na prijemnoj.

Hvala na objasnjenju. Slab sam sa Mikrokontrolerima ali zelim da ih naucim pa makar krenuo od obicnog migavca :D

E sad, pronasao sam dva integralca koji odradjuju ovakav posao. Sljakaju na 128kHz

TX-2B Predajni
RX-2B Prijemni

Koriste se za autice na baterije i sa osnovnim su komandama (napred, nazad, levo, desno, turbo i kombinacije).
Gledao sam i shemu u datasheet i po njoj bi signal mogao direktno preko 2n2222 da se pusti u IR TX a sa ovim drugim integralcem da se prihvati.
Ima i na youtube jednostavno odradjeno sa RF.

datasheet: OVDE


Code:

Number Of Function Code (N) W1 | Decode Result
-------------------------------+--------------------
                4              |     End Code
                10             |     Forward 
                16             |     Forward & Turbo 
                22             |     Turbo 
                28             |     Turbo & Forward & Left
                34             |     Turbo & Forward & Right
                40             |     Backward 
                46             |     Backward & Right
                52             |     Backward & Left
                58             |     Left 
                64             |     Right 


Ovo je stvar koju sam pokusavao da vas pitam ali u jednom mikrokontroleru. Mislim da bi to u jednom bilo mnogo prakticnije. Nadam se da mislite isto.



Citat:
Generalno na forumu nemoj ocekivati da ti neko da kod koji mozes da kopiras u svoj projekat, kliknes compile i on radi. To je medvedja usluga, nista nisi naucio niti razumio i onda opet kad nesto zapne
umjesto da sam izmozgas i prepravis, cimat ces ljude kako ovo kako ono. :)

Naravno da ne ocekujem sve na kasicicu i samo da "otvorim usta" :D, a hocu i zelim da skontam zasto i kako bi moglo da funkcionise.

Ja bih mogao sad da izvucem integralce iz nekog autica kineskog i da napravim kompletno (ali to sad ode van ovog foruma) ali kako bi to moglo preko jednog mikrokontrolera da se obavi?
Zauzimalo bi cak i mnogo manje mesta. Sto je extra. Spakujem sve u jednu malu kutijicu ;)
Imam programer za atmel.kupicu sutra i za PIC Pa da napravimo projekat.
Znaci ne da ste mi sad razjasnili stvari i pomogli...hvala.

Pomenuli ste UART. to je cini mi se transmit-receive. Moracu da trazim PIC sa UART-om?
CyberDjomla
 
Odgovor na temu

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 22:16 - pre 127 meseci
Pronasao sam nesto sto bi moglo da vredi.

Halloween Project: The Human Theremin

Ovde su IR prijemnik i predajnik direktno povezani za napon i za mikrokontroler bez ikakve modulacije.
Ne znam samo koliko bi to koristilo jer u ovom slucaju nema predaje signala vec samo prijem i cini mi se da se tu menja samo napon na emiteru fototranzistora.


Evo i koda koji je koriscen:
Code:
// theremin.c
// for NerdKits with ATmega168
// [email protected]

#define F_CPU 14745600

#include <stdio.h>
#include <stdlib.h>

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

#include "../libnerdkits/uart.h"
#include "../libnerdkits/delay.h"

#define MAX_STATE 65535

uint16_t state;    // phase of triangle wave
uint8_t dir;    // 1 = up, 0=down
uint16_t step;  
uint8_t vol;    // volume, 0 to 255

uint8_t next_val(){
  // compute next phase, doing rollovers properly
  if(dir == 0 && state < step) {
    // if we'd roll over in the negative direction...
    state = step - state;
    dir = 1;
  } else if(dir == 1 && ((MAX_STATE - step) < state)){
    // if we'd roll over in the positive direction...
    state = state + step;
    state = MAX_STATE - state;
    dir = 0;
  } else {
    // no rollover event this cycle
    if(dir)
      state = state + step;
    else
      state = state - step;
  }

  // compute next volume-weighted sample
  uint8_t raw = (uint8_t)(state>>8); // unweighted
  uint16_t rawweighted = raw * vol;

  return (uint8_t)(rawweighted>>8); 
}

ISR(TIMER1_OVF_vect){ //set the new value of OCR1A
  OCR1A = next_val();
}

void pwm_timer_init(){
  //// begin math ///
  // song sampled at 11025Hz
  // clk = 14745600Hz (ticks per second)
  // 
  // with TOP value at =0xFF 
  // 14745600 / 256 = 57600Hz
  // end math ///

  //using TIMER1 16-bit
  
  //set OC1A for clear on compare match, fast PWM mode, TOP value in ICR1, no prescaler
  //compare mach is done against value in OCR1A
  TCCR1A |= (1<<COM1A1) | (1<<WGM11);
  TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS10);
  OCR1A = 0;
  ICR1 = 0xFF;

  //enable interrupt on overflow. to set the next value
  TIMSK1 |= (1<<TOIE1);

  // set PB1 as PWM output
  DDRB |= (1<<PB1);
}

void adc_init() {
  // set analog to digital converter
  // for external reference (5v), single ended input ADC0
  ADMUX = 0;

  // set analog to digital converter
  // to be enabled, with a clock prescale of 1/128
  // so that the ADC clock runs at 115.2kHz.
  ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

  // fire a conversion just to get the ADC warmed up
  ADCSRA |= (1<<ADSC);
}

uint16_t adc_read(uint8_t mux) {
  // select desired channel
  ADMUX = mux;
  
  // set ADSC bit to get the *next* conversion started
  ADCSRA |= (1<<ADSC);

  // read from ADC, waiting for conversion to finish
  while(ADCSRA & (1<<ADSC)) {
    // do nothing... just hold your breath.
  }
  // bit is cleared, so we have a result.

  // read from the ADCL/ADCH registers, and combine the result
  // Note: ADCL must be read first (datasheet pp. 259)
  uint16_t result = ADCL;
  uint16_t temp = ADCH;
  result = result + (temp<<8);
  
  return result;
}

double adc_average(uint8_t mux, uint8_t count) {
  double foo = 0.0;
  uint8_t i;
  for(i=0; i<count; i++) {
    foo += adc_read(mux);
  }
  return foo / ((double) count);
}

double hand_position_0, hand_position_1;

int main() {
  uart_init();
  FILE uart_stream = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
  stdin = stdout = &uart_stream;
 
  state = 0;
  dir = 1;
  step = 100;
  vol = 255;

  adc_init();
  pwm_timer_init();
  sei();
  
  double step_double, vol_double;
  while(1) {

#ifndef DEBUG_DO_FREQ_RAMP
    //grab the hand positions
    hand_position_0 = adc_average(0, 25);
    hand_position_1 = adc_average(1, 25);

    // PITCH
    //linear interpolate
    //step size should be between 100-12000
    //adc values between 200-950
    //y - (x-200)*( (12000-100)/(950-200) + 100
    step_double = ((hand_position_0 - 200)* 15) + 100;
    if(step_double < 1) {
      step = 1;
    } else if(step_double > 12000) {
      step = 12000;
    } else {
      step = step_double;
    }
    
    // VOLUME
    vol_double = (hand_position_1 - 200) / 2;
    if(vol_double < 0) {
      vol = 0;
    } else if(vol_double >= 255) {
      vol = 255;
    } else {
      vol = vol_double;
    }

    printf_P(PSTR("%d\t%d\t%.2f\t%.2f\r\n"), step, vol, hand_position_0, hand_position_1);
#endif 

#ifdef DEBUG_DO_FREQ_RAMP
    vol = 255;
    for(i=0;i<1000;i++){
      delay_ms(1);
      step = step+10;
    }
    for(i=0;i<1000;i++){
      delay_ms(1);
      step = step-10;
    }
#endif

  }

}



Ne mogu vise.
Odoh da spavam.
Laku noc.
CyberDjomla
 
Odgovor na temu

cyberdjomla
Cyber Djomla
Tahografista, serviser racunara
Beograd

Član broj: 189677
Poruke: 44
*.dynamic.isp.telekom.rs.



Profil

icon Re: Primer slanja i prijema bajta25.09.2013. u 22:49 - pre 127 meseci
Evo nekog resenja.

Pronasao sam i gotov proizvod
http://www.coregravity.com/htm...ting_obstacle_with_ir__in.html

Cak i program nije tezak za razumevanje.
http://www.coregravity.com/htm...using_.html#CodeObstacledetect

To je ona prica sa modulatorom i demodulatorom prema i od IR-a. S'tim sto je on, izgleda, ovde izveo modulisan signal na jednom pinu.

E sad to treba spakovati u moj PIC...

CyberDjomla
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Primer slanja i prijema bajta26.09.2013. u 00:39 - pre 127 meseci
ir senzori za prepreke su vrlo laki za implementaciju ali rade do
dvadesetak santimetara i ako se ne koristi klasican demodulator vrlo se
lako zadangiraju, odlicni su za obstacle detection za robote (tu ih ja
koristim) i ni za sta vise (znaci senzor za rampu zaboravi sa tim da radis)
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Primer slanja i prijema bajta

[ Pregleda: 3244 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.