Gå til innhold

Diverse elektronikkprosjekter på gang


Anbefalte innlegg

Da er jeg igang med ett nytt prosjekt... Fant ikke helt ut hva jeg skulle legge til ordren til mouser, så det får vente litt. Har satt opp en Pentium 3 maskin som stand-in for serveren så lenge.

 

freqmeter.jpg

 

Her er da prosjektet så langt, nederste del av kortet er bare en 555 timer i en astabil kobling.

Øverst har jeg en ATtiny24, en MC14511BCP og ett 4x7segment. 14511'ren er en 4bit BCD til 7segment, bruker den bare for å slippe 7 utganger istedet for 4.

 

ATtinyen teller stigende pulser inn på T1 og viser frekvensen ut på 7segmentet, dermed har jeg mitt første frekvensmeter! Nå skal det sies at for øyeblikket bruker jeg den interne klokka(~8MHz) og ikke spesielt nøyaktig matte, men som et "proof of concept" fungerer det glimrende.

Høytaleren satt jeg inn for å høre frekvensen og sammenligne med displayet. ~4000Hz blir forresten vanvittig irriterende veldig fort...

 

Kretsen/koden så langt måler opp til 9999Hz, tinyen går for øyeblikket på 1MHz(8MHz delt ned med 8) som vil gi meg ett teoretisk maks frekvenstak på rundt 1MHz / 2.5 = 400KHz, jeg kan også kjøre tinyen på 1 divider(dvs 8MHz), da er maks frekvens 8 / 2.5 = 3.2MHz. Jeg planlegger dog å kjøre den på full pupp med en 20MHz krystall, da får vi en maks frekvens på 20 / 2.5 = 8MHz.

 

Før jeg begynner å klokke tinyen noe særlig skal jeg få displayet til å fungere på en ordentlig måte, autoranging og greier.

 

Alt i alt, morro!

 

-

Kolbjørn

Lenke til kommentar
Videoannonse
Annonse

Jeg jobbet endel videre på frekvensmåleren men sliter litt med autorange funksjonen så jeg tenker jeg skal forklare litt hvordan en 555 fungerer istedet.

 

lm555astable.png

Her ser vi da en standard 555 koblet som en astabil vippe, forøvrig er det NE555P jeg bruker, ikke LM555 som på skjemaet.

 

Hva er så en astabil vippe?

En astabil vippe er en vippe som ikke er stabil, dvs den veksler kontinuerlig imellom to verdier(+5v og jord i dette tilfellet). En astabil vippe trenger heller ikke en startpuls, den er helt uavhengig.

 

Hvordan virker så en 555 koblet opp slik?

C1 lades opp via R1 og R2, pinne 3 er nå høy(5v), når spenningen over C1 har nådd 2/3 av drifts-spenningen(5v) detekteres dette av pinne 2 og 6, slik at C1 kan lades ut via R1(til pinne7). Når spenningen er nede på 1/3 av drift lukkes pinne 7 igjen og C1 begynner på nytt å lades opp.

 

Frekvensen på pinne 3 bestemmes av formelen:

chart?cht=tx&chl=f=\frac{1.44}{(R1+2R2)C1}

 

Så hvis vi har R1 = R2 = 1K og C1 = 220n får vi

chart?cht=tx&chl=f=\frac{1.44}{(1000 + 2*1000)220n} = 2181.81

 

Dette er vel og bra men noen vil bite seg merke i at vi ikke har en 50% duty cycle(av og på er like lange), faktisk er vi nærmere 66%. Hvis vi vil ha 50 % må R2 være mye større enn R1.

 

Håper dette var informativt, nå skal jeg gå tilbake til koden min og se om jeg klarer å få en autorange-funksjon til å oppføre seg...

 

-

Kolbjørn

  • Liker 1
Lenke til kommentar

Har fått til mye rar kode nå, resultatet kan ses her:

freqmetertesting.jpg

 

Her har jeg satt en ATtiny13A til å lage ett PWM signal så fort den klarer. Denne har en intern klokke på 9.6MHz og det raskeste pulstoget man får ut av det er rundt 4.8MHz. Dette stemmer relativt greit med målingen. Nå har jeg ikke noe å kontrollmåle med, men jeg er iallefall i nærheten :D

 

Jeg måler frekvens på to måter, den første bruker jeg under 10KHz og det er å måle antall interne klokkepulser mellom to stigende kanter. Dette fungerer fint opp til ca 100KHz eller deromkring, litt avhenging av interupt-kodestørrelsen, dvs at hvis jeg bruker lengere tid inne i interupten enn det er imellom pulser vil microkontolleren ikke gjøre annet enn interupter. Når da viktige ting som oppdatering av displayet ikke gjøres i interupts blir de gjerne litt glemt.

 

Metoden jeg bruker for frekvenser over 10KHz er at jeg lar timer 1(16bit) drives av målingen, dermed får jeg "hardware" telling av pulser. Timer 0(8 bit) bruker jeg for å ta tiden på 1/25 dels sekund. Det er i tillegg overflow variabler for å utvide både timer 1 og 0. Når timer 0 har gått rundt nok tar jeg rett og slett antall pulser detektert og multipliserer med 25.

 

Jeg bruker to MM74HC595N som "drivere" for 7-segment displayet, de er riktignok ikke bygd for akkurat dette formålet, men det fungerer fint. 595en er en seriel til paralell brikke, dvs tre pinner inn, 8 pinner ut, i tillegg til at flere kan kobles sammen.

 

Frekvensen detektert blir naturlig nok modifisert noe for visning, den blir multiplisert opp eller delt ned avhengig av om vi har lave eller høye frekvenser. Det er også brukt et buffer på 5x32bit for gjennomsnittsberegning av frekvensen, dette for å få ett litt "roligere" display.

 

Framtiden for dette prosjektet?

Tja, har bestilt noen brikker som kan gå foran målepinnen for å øke frekvensområdet enda mer, problemet jeg har med det er at for øyeblikket har jeg brukt 2046 av 2048 bytes flash... Mulig jeg kan jukse til noe ved hjelp av assembler, vi får se når jeg får pakke ifra futurlec.

 

Godt å få det til å fungere iallefall, mye frustrasjon i koden min :D

 

-

Kolbjørn

Lenke til kommentar

Hvordan virker engentlig timeren(e) i AVR?. Kan man f.eks. ved hjelp av en 16-bit timer få et PWM-signal som kan stilles 0-100% duty cycle med en 16-bit oppløsning f.eks.?.

Joda, går fint det. Eneste problemet er at hvis du skal bruke det til en viftekontroller, vil bruk av større oppløsning enn 10bit legge deg ned i det hørbare frekvensområdet.

En test jeg skrev til en tiny24:

int main(void)
{
   DDRA |= (1 << PA6);
   ICR1 = 1500;
   OCR1A = 750;
   TCCR1A |= (1 << WGM11) | (1 << COM1A1);
   TCCR1B |= (1 << WGM12) | (1 << WGM13)| (1 << CS10);
   CLKPR = 0x80;
   CLKPR = 0x00;
   while(1)                                                                 //Main loop
   {
       asm volatile ( "nop" );
   }
}

Kodesnutten setter 16bit timeren(timer 1) til maks 1500 med en dutycycle på 50%.(pinnen går høy ved 0 og lav ved OCR1A). Brukte i dette tilfellet en ekstern oscillator på 20MHz, og det gav meg en hørbar frekvens på ca 20 000 000/1500 = 13 333Hz, Akkurat hørbar for mitt vedkommende, mister hørselen ved ca 15k.

 

Nå kan man jo argumentere med at "en vifte er da ikke en høytaler", men under pwm så er faktisk vifta en glimrende høytaler. Så moralen er vel egentlig å holde seg til 10bit eller under, som etter mitt syn er mer enn nok egentlig.

 

Håper dette var forståelig :)

-

Kolbjørn

Lenke til kommentar

Hvordan virker engentlig timeren(e) i AVR?. Kan man f.eks. ved hjelp av en 16-bit timer få et PWM-signal som kan stilles 0-100% duty cycle med en 16-bit oppløsning f.eks.?.

Joda, går fint det. Eneste problemet er at hvis du skal bruke det til en viftekontroller, vil bruk av større oppløsning enn 10bit legge deg ned i det hørbare frekvensområdet.

En test jeg skrev til en tiny24:

 

Kodesnutten setter 16bit timeren(timer 1) til maks 1500 med en dutycycle på 50%.(pinnen går høy ved 0 og lav ved OCR1A). Brukte i dette tilfellet en ekstern oscillator på 20MHz, og det gav meg en hørbar frekvens på ca 20 000 000/1500 = 13 333Hz, Akkurat hørbar for mitt vedkommende, mister hørselen ved ca 15k.

 

Nå kan man jo argumentere med at "en vifte er da ikke en høytaler", men under pwm så er faktisk vifta en glimrende høytaler. Så moralen er vel egentlig å holde seg til 10bit eller under, som etter mitt syn er mer enn nok egentlig.

 

Håper dette var forståelig :)

-

Kolbjørn

 

Det er rett det du sier, men det er jo en kombinasjon av klokkehastighet og hva du setter som topp verdi på PWM. På en 10bit timer vil maks topp verdi være 1023, for en 16bit timer 65535. Men så lenge du setter topp verdien lavt nok så spiller det liten rolle om det er en 10 eller 16 bits timer du bruker. Jeg ville gått for en lav topp verdi, f.eks. 255. Dette vil gi frekvenser over det hørbare området og fremdeles mulighet til å endre hastigheten i ca 0,5% steg, noe som sikkert er overkill a like vell...

Lenke til kommentar

coolbear:

 

 

Det virker som om at du har ganske god peiling på dette med microkontrollere og PWM.

 

Jeg har i dag en reostat i bilen for å regulere lyset i dash/instrumentpanel. Har også planer om å skifte ut glødepærene med lysdioder.

 

Ser for meg at diodene ikke liker å bli regulert av en reostat og tenker da på å bruke en microkontroller en transistor (evt, flere) for å lage meg en PWMkontoll på lyset.

 

Spørsmålet mitt er da, hvor mye støy vil denne kontrolleren lage på strømnettet i bilen?

Lenke til kommentar

Takk for oppklaringen med timer og PWM. :thumbup:

 

Da kan det jo hende at forsøket mitt ikke er fullstendig dødsdømt før jeg startet. Jeg hadde tenk å lage en krets for å regulere fra 24V og fritt justerbart nedover. Med en toppverdi på 1000 og en frekvens på 20 MHz i kretsen skulle da gi en svitsjefrekvens på 20 kHz og la meg regulere i inkrementer på 0,024V, samt at ADC er 10 bit (1024 delinger). Det er jo i grunn helt akseptabelt til mitt bruk. Dog er jeg ikke sikker på hvor kjapt den kan reagere, men det er derfor jeg kaller det et forsøk.

Lenke til kommentar

Ser for meg at diodene ikke liker å bli regulert av en reostat og tenker da på å bruke en microkontroller en transistor (evt, flere) for å lage meg en PWMkontoll på lyset.

Ser ikke hvorfor diodene ikke skulle like å bli kontrollert av en rheostat, så lenge du setter en motstand i serie med rheostat-en for å holde maksimum strømtrekk nede på et normalt nivå for lysdiodene. Rheostat-en blir da rett og slett en forlenging av serie-motstanden og må da være stor nok til å strupe strømmen. Enkleste ville nok vært å bruke en transistor styrt av et potmeter, da du kan koble det tredje benet til jord for å strupe transistoren, og dermed dimme lyset, helt.

 

Spørsmålet mitt er da, hvor mye støy vil denne kontrolleren lage på strømnettet i bilen?

Hmm, vanskelig å si. Tror neppe det blir et problem, men nå er jo tro sånt man skal gjøre hvis man er religiøs eller lignende... Har dessverre ikke noe godt svar på det.

 

Hvis du vil bruke prosjektet med lysdiodene som et øvings-prosjekt for microkontrollere er jeg absolutt for det, men så liker jeg prosjekter som går inn for å skyte spurv med kanon også da. "Hvorfor gjøre det lett, når man kan gjøre det komplett umulig!". Ser fram til oppdateringer, blir spennende å følge med.

 

-

Kolbjørn

Lenke til kommentar

Jeg har prøvd kombinasjonen diode + potmeter. Det virker, men er et veldig lite område man kan justere på, så sammen med et par av glødelampene vil ddet funke dårlig.

 

Dessuten, så er reostaten plukket vekk av de som eide bilen før, den var sikker kaputt, noe som er vanlig på disse bilene.(enda en grunn til å prøve seg med PWM :thumbup: )

 

 

Ellers er jeg også tilhenger av å skyte spurv med kanon når man kan :) Hvorfor gjøre det lett når man kan gjøre det vanskelig?

Lenke til kommentar

Har du tenkt noe på hvordan du vil justere lysstyrken? Jeg ville nok valgt en eller annen form for potmeter, dette kan du jo lese av ved hjelp av en ADC i microen for å oversette til pwm ut. Annen mulighet er selvsagt opp og ned knapp, med sine fordeler og ulemper.

Du må iallefall ha en spenningsregulator og transistorer, ville nok kjørt 12v over transistorne til lysdiodene istedet for å ta 5v fra regulatoren pga mindre last på regulatoren=mindre kjøleribbe.

 

I påvente av 4kb tiny44 microer har jeg satt frekvensmåleren på vent, koden ble litt for stor, eventuelt mine planer ble for omfattende :D Har bygd om breadboard-ene til et kapasitans-meter istedet, eller mere korrekt: forskning mot et kapasitansmeter, for øyeblikket lyser den opp en lysdiode når spenningen over kondensatoren passerer 0.7v.

 

Planen er å begynne målingen på 0.7v ved å registrere timer1, så registrere timeren når spenningen passerer 0.5vcc(ca 2.5v), tid2 - tid1 er mulig å bruke i en utregning for å finne størrelsen på kondensatoren. Idéen er hentet ifra http://elm-chan.org/works/cmc/report.html,mye av koden er også basert på assemblerkoden til det prosjektet, riktignok i c/c++ nå.

 

Morro at det ble litt liv i tråden :)

 

-

Kolbjørn

Lenke til kommentar

Har du tenkt noe på hvordan du vil justere lysstyrken? Jeg ville nok valgt en eller annen form for potmeter, dette kan du jo lese av ved hjelp av en ADC i microen for å oversette til pwm ut.

Var noe sånt jeg også tenkte på :)

 

Annen mulighet er selvsagt opp og ned knapp, med sine fordeler og ulemper.

 

Det er jo også en miulighet, men da må man kunne programere sånn at den starter på det forrige nivået.

Tror jeg satser på et potmeter :)

 

 

Du må iallefall ha en spenningsregulator og transistorer, ville nok kjørt 12v over transistorne til lysdiodene istedet for å ta 5v fra regulatoren pga mindre last på regulatoren=mindre kjøleribbe.

 

Ja, regulator må jeg ha (LM317 tenkte jeg på :) ) og en transistor som tåler et par ampere :) Kjøling til transistor er ikke noe problem, har jo karoseriet på bilen som kan brukes til det :)

 

 

 

Morro at det ble litt liv i tråden :)

 

Liv liker man :D

 

 

 

 

 

 

Da må jeg handle inn microkontroller da. og lære meg å programere den :ermm:

Printkort MÅ bli så enkle som mulig, i og med at jeg tenger dem med spritusj :p

Endret av 900i
Lenke til kommentar

Liten oppdatering bare, har fått forsendelse fra mouser med snacks. Har koblet opp frekvensmåleren igjen da jeg fikk noen tiny44-er, det er morro å se hvor nøyaktig krystallene jeg fikk er.

 

Utenom å gå på en smell der tiny24-en ikke ville programmeres pga noe lav klokkefrekvens(32 768Hz) så er prosjektet pent igang.

 

Det jeg sliter med nå er at tiny44-en går i sirup/lås når ICP frekvensen begynner å krype over ~200KHz, dette er litt upraktisk da jeg ikke får noe forvarsel om det så jeg kan switche over... Må google litt mere tenker jeg.

 

-

Kolbjørn

Lenke til kommentar

Liten oppdatering til :)

Fikk med forsendelsen igår noen dioder til strømforsyningen jeg holder på med; Disse er av typen MUR420, 4A/200v/UltraFast. For mitt bruksområde spiller det ingen trille om de er "ultrafast" eller "normal", er tross alt bare 50Hz som skal likerettes. Her har vi gått etter pris, litt over 2kr per stk.

 

Det jeg ville vise var en liten sammenligning av diodestørrelser:

dioder2.jpg

 

Som vi kan se er 1N914 en liten knøtt, det er tross alt en signaldiode(100V/0.3A maks). 1N4001(50V/1A) er egentlig ikke så stor den heller, sett opp imot MUR420(200V/4A). Neste steg opp blir vel TO-220 størrelse innpakning(som effekttransistorer), hadde egentlig forventet at 420-en skulle være det også. Litt usikker på hvordan jeg skal få disse ned i breadboard-et mitt...

 

-

Kolbjørn

Lenke til kommentar

Fikk en oscilloskop-probe fra kina i dag, nå mangler jeg riktignok et oscilloskop å bruke den på, dermed var det duket for dagens prosjekt: bruke pc-en som oscilloskop.

 

Lang historie kortet ned: probe -> opamp -> lydkort line-in -> programvare.

 

Proben er en helt standard 100MHz 1x/10x sak, under 10$; Siden lydkort gjerne har lav impedans på line-in vil bruk av proben koblet direkte på lydkortet ha en effekt på kretsen, derfor bruker jeg en opamp-krets for å høyne impedansen til rundt 1MOhm. Da vil ikke probing av kretsen være en like stor forstyrring og vi får dermed bedre målinger.

 

Frekvensområdet til dette oscilloskopet er dessverre begrenset fra 20 til 20KHz av flere grunner, deriblandt at lydkort av en eller merkelig grunn kun er beregnet på lyd. Vi kan dermed ikke bruke oscilloskopet til å måle verken DC spenning eller ultralyd.

 

Når det gjelder spenningen, er det greit å holde denne nede under +-1v, dette er også grunnen til at jeg bruker det integrerte lydkortet og ikke det jeg bruker daglig; Det hadde vært litt kjipt å overbelaste inngangen og svi lydkortet.

 

Programmet jeg bruker på pc-en heter fantasifullt nok Soundcard Oscilloscope(http://www.zeitnitz.de/Christian/scope_en) og er gratis å bruke som privatperson. Programmet fungerer forsåvidt greit, enkelte kunstige begrensninger finnes, som fiksert størrelse på vinduet og ingen mulighet å forandre samplerate. Men alt i alt så er programmet det beste jeg har funnet så langt.

 

Screenshot av programmet i bruk(Måler en 555 med R1 = R2 = 820ohm, C = 0.47uF:

scopesnd.png

 

-

Kolbjørn

Lenke til kommentar

Hihi, testet transparentene jeg har fått meg:

24header.jpg

 

Der det ser ut som det er gjengrodd er bare jeg som har lekt meg litt med skalpell, var litt kontakt mellom to baner.

 

Trenger ørlite lengere eksponering så blir dette konge, dette var en 5minutter test, så rundt 7 minutter tenker jeg blir bra.

 

-

Kolbjørn

Lenke til kommentar

Noen lurer vel på hva i all verden jeg har laget nå? Enda ett rart prosjekt? Knot å lodde?

Svarene er en header, ja og ja.

 

Litt mer spesifikt så er det en header med kjekke ting som bypasskondensator, ekstern krystall, reset-pullup og 6pin ISR header.

Inspirasjonen kommer fra denne posten: http://tinkerlog.com/2009/01/18/attiny-breadboard-headers/.

 

Noen vil kanskje reagere på at jeg planlegger dette med et enkelside kort, og ja det er litt mere knot da jeg må lodde headerne fast på samme side. Dette tar litt lengere tid, men er ikke umulig.

 

Skjemaet og kortlayout bildene er fra neste versjon som er planlagt med resetbryter, ikke uten som den jeg lagde i går. Bildene av delen er derimot er av den jeg lagde i går.

 

24headermk2schem.png

 

24headermk2board.png

 

24headermk2unit2.jpg

 

24headermk2unit1.jpg

 

 

En smule skjeve bein kanskje? :D

 

-

Kolbjørn

Lenke til kommentar

Hva bruker du til å programmere disse tusenbenene? Og hvordan gjør du det?

For øyeblikket bruker jeg en USBTinyISP(http://www.ladyada.net/make/usbtinyisp/).

usbtinyisp.jpg

 

 

Jeg har egentlig vært veldig fornøyd med den, har ikke brukt den i windows da driverne ikke er signerte, man kan omgå denne sperren, jeg har bare ikke gått inn for det når jeg ikke bruker windows som hoved-OS.

 

Programmeringen foregår ved hjelp av et program som heter avrdude(http://www.bsdhome.com/avrdude/), programmet er kun for terminal. Som du sikkert ser har programmereren en kontakt som går rett ned på headeren jeg laget nylig, ble litt lei av å plugge ledninger fra kontakten til breadboardet :p

 

En programmering av en ATtiny24 kan se noe slikt ut:

avrdude -p t24 -c usbtiny -e -U flash:w:kompilertkode.bin

 

Jeg kommer nok ikke til å bruke usbtinyen så veldig mye mere, har bestilt en STK-500 og en AVR-Dragon(offisielle produkter), ikke at usbtinyen har vært dårlig, jeg bare ser at microkontrollere er noe jeg kommer til å holde endel på med, så det kan være greit å ha noen kraftigere verktøy(onchip debugging foreksempel).

 

I begynnelsen brukte jeg en parallellport programmerer, så det er absolutt en måte å gjøre det veldig billig, skjema og slikt finner du på avrdude siden.

 

Håper dette besvarte spørsmålene dine, rop ut hvis det er noe mer du lurer på.

 

-

Kolbjørn

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...