Richard87 Skrevet 22. januar 2005 Del Skrevet 22. januar 2005 (endret) Jeg harett porsjekt på skolen der eg ska laga en "decoder" av signalet fra fjernkontrollen til tv'en(får senere bruk sammen med pc'en) Signalet ser ca. sånn ut: kossen lage eg ein funskjon i C som venter på at signalet skal komme, og når det kommer, lagre det og sende signalet tilbake, som (forhåpentlig vis) 1'ere og 0'ere? kort forklart: sende tilbake pulsen i string/char/int format.. void main(void) { printf(GetPuls) // sender Koden fra fjernkotrollen til PC'en over RS232/Serieporten } eg har ingen peiling på dette så eg trenge någen tips og veiledning, eventuelt linker kor eg kan lesa mer om denne type programmer.. thx Endret 23. januar 2005 av Richard87 Lenke til kommentar
saboi Skrevet 22. januar 2005 Del Skrevet 22. januar 2005 (endret) det er platformspesifikt hvordan du kan lese fra RS232 hvordan kommer egentlig signalet inn der uansett? Endret 22. januar 2005 av saboi Lenke til kommentar
Richard87 Skrevet 22. januar 2005 Forfatter Del Skrevet 22. januar 2005 Jeg skal skrive ett programm i C som skal programmeres inn i enn Microkontroller(Assembly, C etc)... Jeg kan lese av signalet på en Variabel "Puls", er 0 eller 1 avhengig av signalet.. Lenke til kommentar
saboi Skrevet 22. januar 2005 Del Skrevet 22. januar 2005 jaha.. det fulgte vel med dokumentasjon og en compiler med denne mikrokontrollern på hvordan man programmerer den? du sier at du kan lese av signalet, hva er det du egentlig spør etter da? vi kan ikke vite hvordan vi skal programmere din mikrokontroller når vi ikke aner hva det er for noe en gang? vær litt mer spesifikk Lenke til kommentar
kjetil7 Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 Som nevnt er det avhengig av blant annet platform. Men en start kan være å se på lignende prosjekter: Win32: http://winlirc.sourceforge.net/ Linux: http://www.lirc.org/ Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 (endret) problemet e koden, kossen kan eg laga ett program/kode/funskjon i C som venter på et signal(om Puls = 0 eller 1)og lagre denne kodenog sende den tilbake. (vanskeligt of forklare:( ) bare en endeløs loop som venter på et signal, når den får et signal(dvs Pusl variabelen forandrer seg fra 0 til 1 og mottsatt) og som tar opp signalet, og når signalet er over sende tilbake til stedet hvor den ble påkalt... Jeg trenger ganske enkelt hjelp til og lage en funskjon som venter til en variabel Puls forandrer seg fra 0 til 1 og så ta opp signalet og så sende det tilbake... [EDIT] Det jeg skal programere er en Atmel 8515 mikrokontroller med C som jeg skriver og programmerer i CodeVision... Endret 23. januar 2005 av Richard87 Lenke til kommentar
Klette Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) while(running){ if(getPulse == 1){ printf("1"); } else { printf("0"); } } blir vel noe sånt.... *beklager, skulle være C ikke C++* Endret 23. januar 2005 av Klette Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 men hvilken platform er du på? er det mikrokontrollern som er kobla til serialporten? du fikk helt sikkert med dokumentasjon på den mikrokontrollern.. og når du sier " problemet e koden, kossen kan eg laga ett program/kode/funskjon i C som venter på et signal(om Puls = 0 eller 1)og lagre denne kodenog sende den tilbake." så går det ikke. C vet ikke noe om hardware eller operativsystem.. det er derfor det er platformspesifikt og hvis du ikke gir mer informasjon er det umulig å hjelpe deg. Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 "plattformen" kan kjøre vanlig C, men jeg kan ikke hive med for mange headere fordi jeg har dårlig plass, jeg kan selfølgelig og programmere den i Assembly etc, forskjellen på denne plattformen og Win32 er windows.h o.l.l. klette var inne på noe, men jeg trenger litt mer avansert kode for og samle sammen et signal(1'ere og 0'ere), Signalet er ganske enkelt en variabel Puls som forandrer seg i forhold til inngangen, thats it Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 jeg tror ikke du helt skjønner hva jeg mener.. HVILKEN PLATFORM ER DU PÅ? windows? linux? bsd? og er mikrokontrollern kobla til serialporten? isåfall, må du programmere den også for at den skal kunne sende et signal til serialporten? for da må du jo programmere 2 programmer.. et for mikrokontrollern som sender signalet til serialporten, og et til windows/linux/bsd/whatever som leser serialporten Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 (endret) ok, eg fatte, eg compile på windows xp, så brenne eg det på microkontrolleren, allt det andre har eg kontroll på, kommunikasjonen på rs323 har eg satt opp etc, det einaste eg har problem e algorithmen som skal lesa av pulsen("decoding") og senna ann te programmet mitt [EDIT] PC'delen e ikkje ett problem, der bruke eg VB.. Endret 23. januar 2005 av Richard87 Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 aha vel, det kommer som sagt helt an på mikrokontrollern, men fikk du med dokumentasjon på den? og har du dokumentasjon på CodeVision? se i dokumentasjonen hvordan man lager en interrupt. som sagt, helt umulig for oss å hjelpe deg siden det ikke er standard C. og hva mener du med en algoritme for å dekode pulsen? den kommer vel ikke kryptert inn? den kommer vel bare som en serie med 1 og 0? uansett, "algoritmen" i dette tilfellet er hvordan du setter opp en interrupt for hver gang du får et signal, og så kode for å sende det signalet videre til serialporten, men igjen, det står i dokumentasjonen. Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 hehe,ok, problemet e at i CodeVision Evaluation v. kan eg ikkje bruka interupts, så eg må lesa inn pulsen heila tiå og analysera ann katid serien e over, og ka ti ann starte igjenn:( eg kan bruka Timere, men eg e ikkje heilt sikker på kossen det fuingere... har du någen ideer? Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 kjøp codevision eller så har gcc sikkert noe avr-greier. men som sagt, jeg har aldri programmert en atmel8515 så jeg aner ikke åssen den fungerer. men jeg har programmert en laserpenn og da fikk jeg med en veldig fin "default" kode, som var helt basic, så kunne du forandre den som du selv ville, men det har du kanskje ikke fått med på den der? søk på google etter eksempelkoder til den mikrokontrollern din, kanskje lettere å lese de enn dokumentasjonen/specen. men er det så veldig vanskelig å polle signalet hele tida? er ikke helt sikker på hva slags Timere du snakker om, men les litt mer om de? å polle er ikke akkurat rocket science Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 eg forstår, men eg tror ikkje det e vanskelig og få te det signal greiene, men eg ane ikkje kor eg ska starta.. som sag, så hva Klette inne på någe, men eg ane ikkje ka eg ska gjør videre for og sjekka om der e et signal eller om det ikkje e ett signal.. Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) hvis du ikke finner noe eksempelkode er jeg redd det eneste du kan gjøre er å lese specen/dokumentasjonen på mikrokontrollern du kan også spørre her de kan sikkert si hvordan du skal starte Endret 23. januar 2005 av saboi Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 eg tror du ennå har missforstått meg:( det eg ska gjør e og annalysera bit møsteret som heila tiå forandre seg på variabelen "Puls"(egentlig PORTA.0) og sjekka bitmønsteret og viss det er et "valid" bit mønster å skal den sende det tilbake som en vanlig funsjon int Code(void) { blablabla; return "koden"; } og så tar resten av programmet seg av hva som skal sendes ut... enne eller annen loop, problemet er kossen denne loop'en skal se ut... Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) åja, men da er det ikke noe sak.. vel, hva er variablen puls? int char etc? hva er et valid bitmønster? har jeg forstått deg riktig hvis du har kode som tar seg av å lese signalet og putte det i variablen Puls og du har kode som kan sende data til serialporten? hvis du har det, kan du paste all koden du har her, så blir det litt lettere.. Endret 23. januar 2005 av saboi Lenke til kommentar
Richard87 Skrevet 23. januar 2005 Forfatter Del Skrevet 23. januar 2005 (endret) ok, variabelen Puls er bare enten 0 eller 1 avhengig av PORTA.0 sin verdi(+5v = 1, 0v = 0) et valid bitmønster er vis du såg på (den ganske patetiske) tegningen så kommer det en rekke 0'ere, så en serie med 0'ere og 1'ere, og så igjenn en serie med 0'ere, altisammenvariabelt, unntat minimums lengden på antall 0'ere etter et "valid bit-mønster", det jeg vil trekke ut er ganske enkelt den serien med bit's som komm inn mellom rekker på 0'ere... (hvis du fårstår hva jeg mener...) BTW, her e koden eg har skreve te nå, eg tvile sterkt på at det virke, men kansje du ser litt bedre ka eg meine då...: /***************************************************** 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 unsigned int positive(void) { unsigned int count; count=0; while(Puls==1)count++; return count; } unsigned int negative(void) { unsigned int count; count=0; while(Puls==0)count++; return count; } void waitfor(void) { while(Puls==0){}; } unsigned int GetPuls() { int count; int count2; unsigned int ret; int x; waitfor(); while (count2 > 10) { x++; if (Puls==1){count=positive();} else { count=negative();} count2=count; } return 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; while (1) { // Place your code here unsigned int ret; ret=GetPuls; if (ret!=0)printf(ret); }; } jj Endret 23. januar 2005 av Richard87 Lenke til kommentar
saboi Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) vet du størrelsen på hvert signal? er hvert signal like stort? vet du hvor mange 0'er det kommer mellom hvert signal eller varierer det også? hvis størrelsen på hvert signal varierer og antall 0'er mellom hvert signal varierer, hvordan vet du da at det er et nytt signal? ved første 1? men hvordan vet du da at et signal slutter når det treffer 0? hvor mange byte er typen int på den mikrokontrollern, og er en byte 8 bits på den? edit, jeg skjønner ikke helt hvordan du har tenkt deg fram til den koden der.. blir Puls automagisk oppdatert av seg selv til 0 og 1 etterhvert som den får signaler? Endret 23. januar 2005 av saboi 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å