Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 nope, eg vett bare at det e ett vist anntall nuller MELLOM hvert signal, dvs la oss si at det er en konstant MinBredde = 10 mellom hvert signal, MEN hvert signal starter på en 1'er.. Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) ok.. men liksom, hvor får du printf fra? skulle ikke dette sendes tilbake til serialporten? hvis du kan bruke printf kan du jo bare ta det som klette skrev helt i starten? sorry, men jeg tror du er ganske på bærtur med den koden der.. du blir nok nødt til å lese hvordan man programmerer den mikrokontrollern, og jeg tror du også må finne ut akkurat hva du vil.. for jeg klarer ikke helt å skjønne det. Endret 23. januar 2005 av saboi Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 (endret) printf er skrevet/forklart(whatever) i ein av header-filene, og i komfigurasjonen i CodeVision... btw, Puls blir oppdatert av seg selv... Endret 23. januar 2005 av Richard87 Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 joja. men hvorfor bruker du printf? hvor blir det skrevet ut da liksom? jeg trodde meningen var å sende det tilbake til serialporten og skrive det ut der.. Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 hehe, printf er en funskjon på microkontrolleren som printer innholdet til serieporten.. Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) oops nei Endret 23. januar 2005 av saboi Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 (endret) eg fårstod _veldig_ lite av den koden der:( eg lage mest programmer i VB, og e stort sett n00b i C/++, poenget e at funksjonen ska sammla opp hele serien og SÅ sende den videre for og analysering... f.eks 000100101011011000000000010010101101100000000000000010010101101100000 etc så sender funksjonen "100101011011" altså en loop som venter på den første 1'ere, og så printe ut hele serien når det er komt f.-eks 10 0'erdvs, den er nødt og være minst 10tegn bakfor, tror eg...? [EDIT] unsigned int signal[100]; void firstp(void) /***************************************************** Chip type : AT90S8515 Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 128 *****************************************************/ #include <90s8515.h> #include <stdio.h> #include <delay.h> #define Puls PORTA.0 #define Mellom 10 unsigned int signal[100]; char decode(void) { unsigned int value; int teller; for (teller=0;teller>100;teller++) { value=value +signal[teller]; } switch (value) { case 0:return "A";break; case 1:return "B";break; case 2:return "C";break; default:return 0;break; } } void firstp(void) { int finnished; int tell; signal[0]=1; while (Puls!=1); while (finnished == 0) { int count; count++; while (Puls!=signal[count-1]); signal[count]=Puls; //sjekk om signalet er over.. for (tell = 0; tell<Mellom;tell++) { if (signal[count-tell]==1) break; else finnished=1; } } } void main2(void) { while (1) { char ret; while (Puls==0); firstp(); //ok, formatet e klart... ret = decode(); printf(ret); } } void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; UCR=0x18; UBRR=0x19; ACSR=0x80; main2(); } ok, eg har "tenkt" litt, tror du denne koden vil virke?( eg har ikkje peiling) Endret 23. januar 2005 av Richard87 Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) tror ikke den vil virke så bra nei.. dette er en funksjon som leser signalet helt til den leser 10 0'er, da stopper den den fyller opp en array signal som du ser short signal[100] = { 0 }; void get_signal(int num, short start, short* sig) { static int signal_slutt = 0, k = -1; if(num > 10) { signal_slutt = 1; sig[k - 10] = -1; } while(signal_slutt == 0) { if(Puls == 0) { if(start == 0) { k = 0; get_signal(0, 0, sig); } k++; get_signal(++num, 1, sig); } else { sig[++k] = 1; start = 1; } num = 0; } } get_signal(0, 0, sig); edit, sånn bare fiksa koden så den setter -1 i arrayen der signalet slutta Endret 24. januar 2005 av saboi Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 du har ikkje lyst og forklare den koden litt mer i detalj? Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 sånn fixa koden litt. det koden gjør er bare å kalle seg selv (rekursjon) hver gang Puls er 0. den teller hvor mange ganger den kaller seg selv, ved hjelp av num som er parameteret. hvis num er over 10 så stopper den Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 og eg får antall 1 ere i signalet ut av *signal? Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 ja.. hele signalet ligger jo i signal. så du kan få antall 0'er og 1'ere der ja Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 ok, tusen takk for hjelpen;) meg eg komme nåkk te bake seinare, får studera det i mårrå.. Lenke til kommentar
Richard87 Skrevet 24. januar 2005 Forfatter Del Skrevet 24. januar 2005 (endret) og i teorien ska eg bare utføra: while (1) { printf(get_signal()); } så blir signalet hele tiden printed ut? [EDIT](sorry for bumping, glømte meg...) Endret 24. januar 2005 av Richard87 Lenke til kommentar
JBlack Skrevet 25. januar 2005 Del Skrevet 25. januar 2005 /* Ikke alle av de følgende brukes. De som ikke brukes er tenkt bruk av read_pulse funksjonen */ #define polls_per_pulse = 4 /* for sikker sampling */ #define pulse_length = 100 /* hvor lenge en puls varer i forhold til klokka på kontrolleren */ #define poll_interval (pulse_length/polls_per_pulse) /*hvor ofte signalet polles */ #define time_out_pulses 10 /* antall nuller mellom hvert signal */ #define test_main #ifdef test_main #include <stdio.h> const int test_pulses[] = {0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,0}; int i=0; int read_pulse(){ /* kode for lese pulser fra hardware */ if (i<sizeof test_pulses/sizeof(int)) i++; return test_pulses[i-1]; } void send_code(int signal){ /*kode for å sende dekodet signal til whatever */ printf("%X\n",signal); return; } #endif /*test_main*/ void main_loop(){ int quit; /* settes ulik null for å avslutte loop */ int pulse; /* 0/1 */ int signal; /*dekodet signal */ int zeroes; /*hjelpevariabel*/ quit=0; signal = 0; while (!quit){ pulse = read_pulse(); if (pulse==0){ zeroes+=1; if (zeroes==time_out_pulses){ if (signal) send_code(signal); signal=0; } } else { signal = signal << (1+zeroes); signal += pulse; zeroes=0; } } return; } #ifdef test_main int main(){ main_loop(); } #endif /*test_main*/ Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå