Sida 3 av 4

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 13:08:20
av Nerre
Men är det inte lite jobbigt för en hobbyist att löda en LPC1102?

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 13:28:02
av Icecap
Inte "jobbigt" utan "omöjligt utan lödugn" är det som gäller.

Och skulle man lyckas kommer mönsterkortet att bli intressant. Just den kapseltyp är alldeles fel att rekommendera till hempysslare.

Sedan har jag svårt att se hur en 26:- krets i omöjlig kapsel ska kunde slå ut en ganska kompetent krets till 6:51 i en helt OK kapsel... Att dissa 8-bit till fördel för 32-bit känns inte helt vettigt i alla lägen. Själv använder jag båda och och mitt senaste design använder en 32 bitars men jag skulle aldrig dissa 8 bitars av den anledning.

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 14:32:44
av snigelen
I det här fallet är det väl overkill med en 32-bitare. Läsa en pot och generara en servo-signal (med PWM från en 16 bitars timer). Det rör sig om typ 35 instruktioner.
Här är förresten en assemblerversion av programmet som även bör funka med AvrAssembler2 som ingår i gamla AVRStudio4.19.

Kod: Markera allt

;;; 
;;; Read ADC2 (PB2) and output servo signal on PB0.
;;; ATtiny5 or 10 at default 1MHz.
;;;
        
#include "tn10def.inc"

.cseg
.org 0
        rjmp    init

init:   
        ;; ADC channel 2
        ldi     r16, 2
        out     ADMUX, r16
        ;; Disable digital input on PB2
        sbi     DIDR0, ADC2D
        ;; Enable ADC, presc 1:8 for 125kHz ADC-clock
        ldi     r16, (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0)
        out     ADCSRA, r16

        ;; PB0 output.
        sbi     DDRB, PB0;

        ;; Timer0 50Hz PWM, 1us tick, mode 14 with ICR0 as TOP.
        ldi     r17, high(19999)
        ldi     r16, low(19999)
        out     ICR0H, r17
        out     ICR0L, r16

        ;; Start with 1.5 ms pulse-width
        ldi     r17, high(1500)
        ldi     r16, low(1500)
        out     OCR0AH, r17
        out     OCR0AL, r16

        ;; OC0A non inverting PWM, mode bit 1
        ldi     r16, (1<<COM0A1) | (1<<WGM01)
        out     TCCR0A, r16
        ;; mode bits 2 and 3, presc 1:1
        ldi     r16, (1<<WGM03) | (1<<WGM02) | (1<<CS00)
        out     TCCR0B, r16

.def    adc4l = r24
.def    adc4h = r25
.def    temp  = r16
.def    cnt   = r17
.def    zero  = r18

        clr     zero
loop:
        ;; Preload adc4 with minimum pulse width
        ldi     adc4l, low(998)
        ldi     adc4h, high(998)

        ;; Take four ADC samples and add them to adc4
        ldi     cnt, 4
adc_loop:
        sbi     ADCSRA, ADSC    ;Start conversion
adc_loop1:      
        sbic    ADCSRA, ADSC    ;Skip next if conversion finished
        rjmp    adc_loop1

        ;; adcn4 += ADCL
        in      temp, ADCL
        add     adc4l, temp     ;Add low byte
        adc     adc4h, zero     ;Add carry if set

        dec     cnt             ;Done it four times?
        brne    adc_loop        ;Otherwise do it again

        ;; Set OCR0A to 998 + ADCL + ADCL + ADCL + ADCL
        out     OCR0AH, adc4h
        out     OCR0AL, adc4l
        
        rjmp    loop

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 15:12:47
av JimmyAndersson
Nerre:
"Men är det inte lite jobbigt för en hobbyist att löda en LPC1102?"

Icecap:
"Inte "jobbigt" utan "omöjligt utan lödugn" är det som gäller."


Ni har visst missat att Henry rent av tycker att det är *kul* att löda riktigt små grejer. :)
Det finns ett riktigt "omöjligt" kort han har gjort, men tyvärr hittade jag inte bilderna.

De här är iofs inte långt ifrån:
http://elektronikforumet.com/forum/view ... 79#p796079
http://elektronikforumet.com/forum/view ... 45#p194045
http://elektronikforumet.com/forum/view ... =3&t=12681

Så jag tror att han skulle klara en LPC1102. :)

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 15:31:18
av snigelen
Men då kanske han skall ha en tiny20. Den kan fås i 12 bollars WLCSP (Wafer Level Chip Scale Package) på 1.54 x 1.388 x 0.433 mm. Det är ganska litet ;-).

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 15:49:07
av Henry
snigelen skrev:Du har väl inte radnummren från kod-rutan med i programmet?
Nepp och det går inte att kopiera heller.


Limpan4all: Om det var mig det var menat till så om jag kunnat programmera (som jag nämt mer än en gång att jag inte kan) så hade jag ju givetvis då tagit första billigaste och fixat detta på 5 röda. Nu kan jag inte det utan måste förlita mig på att någon i världen gjort ett program som jag eftersöker och till någon CPU och då de vanligsta använda bland hobbyister, och således finns mest hemmasnickad kod till, är som jag ser det AT CPUer och således Mega eller Tiny.


..nog mest med att göra att du inte kan programmering speciellt bra.

Det är förstås en kraftig underdrift. :) Jag menade dock ordagrant precis det jag skrev alltså inte bra på AVRStudio inte programmering viket nu visserligen också stämmer fullt ut. AVRSturdio skiljer sig ju radikalt mot tex Arduino vad gäller graden av komplexitet även om programmeringen som sådan är den samma. Tänkte om jag kanske gjorde något fel vid kompilering eller vad fan som helst, var mer det jag menade.

"Nej den DÄR knappen skall du ju förstås inte tycka på när det är si och så och ditt och datt så det var ju inte så konstigt att det då inte fungerade."

Den varianten.


Att rekommendera LPC1102 till en amatör hobbyist hade varit en sak men jag har hållit på med detta i princip hela sitt liv så jag personligen ser det i alla fall inte som omöjligt att kunna löda fast 0.1 alternativt 0.05 mm trådar med lödkolv på den. Pill som fan hade det blivit inget snack om det och speciellt om det varit tvunget med alla ytor men kul.

Har inga planer på att göra ett kretskort oavsett vad det blir, ser det som helt onödigt i detta fall. Men med LPC1102 så hade det inte gått för jag vet inget pcb tillverkare av de jag använder, och till rimliga priser, som kan göra smalare ledningar är 6 mil vilket hade behövts.


Edit: gjorde denna för hög med år sedan som var till en laddare:
laddare.jpg
En QFN krets och lysdioden är 3 mm och lödspetsen som var den enda jag hade var på 1.2 mm.


12 bollars WLCSP (Wafer Level Chip Scale Package) på 1.54 x 1.388 x 0.433 mm.

Ja då får jag nog ta och beställa hem 0.01 mm tråd. :D


Jimmy: tyvärr var jag tvuingen att ta bort bilder stup i kvarten för jag hade så lite utrymme där de var lagrade. Nu när vi SEF servern finns så hade det varit en enkel sak att lägga upp de igen men de är väl inte de är så värst intressanta tror jag.

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 16:42:23
av JimmyAndersson
Joodå! :D

När man ska löda något som man tycker är smått
så tittar man på dina bilder och inser att ens kretsar är enorma i jämförelse.
Då förstår man att det ska gå och får mer motivation. :)

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 7 juni 2013, 18:46:48
av snigelen
Jag provade med Atmel Studio utan problem (jag anväder normalt Linux).

Starta Atmel Studio 6.1

New Project...
GCC C Executable project
Device Selection: ATtiny10

Ersätte hela GccAplication1.c med mitt program.

Build|Build Solution
Output:
...

Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 8 juni 2013, 07:39:45
av Henry
Jimmy: hehe, tja jo så kan man ju kanske också se på det. :)

Har varit tvungen att ta bort bilder under årens lopp för jag hade så väldigt lite utrymme att utnyttja så jag fick plocka bort filer stup i kvarten. Nu när vi dock har en egen server här så kan jag väl lägga upp de igen då, om jag hittar alla och har de kvar vls för det är en hel del år sedan jag gjorde de där grejerna. Men hittar jag de så lägger jag upp dem.


snigelen: Jo, har också gjort precis så innan som du skrev nu men har nu upptäckt att numreringen trots allt har blivit kopierad när jag kopierade koden rakt av från kodfönstret, precis som du sade. :oops: Det första som lurade mig och gjorde mig helt säker på att så inte var fallet var att numren blev inte alls markerade utan bara koden i sig så jag utgick helt och hållet ifrån att de då inte kopierats. Den andra orsaken var sedan att jag var 100% säker på att de radnummer som jag ändå såg lades till automatiskt till kod eftersom jag sett dessa nummer överallt på nätet i kodsnuttar och att de sedan automatiskt skulle totalt ignoreras vid en kompilering då det ju var programmet som lade till de så att säga.

Så nu fungerar i alla fall din första kod du lade upp utan några felmeddelanden och så spottade den ut en fin hex fil. :) Så ursäkta missförståndet och extra jobbet på den andra koden.


Men med koden från pot_servo.asm blir det dock "tn10def.inc: No such file or directory".
Image1.jpg
Gissade på att någonting pekade på fel katalog eller så för filen fanns ju. Har rotat runt en hel del nu i någon dryg timme eller två med kataloger, filen och vet inte allt men utan någon som helst skillnad. Inte ens om jag fick tn10def.inc i programmet att direkt peka på den katalogen som filen specifikt fanns i och även om jag tog andra kataloger där då även vägen till filen visades i toppen så hittades den inte ändå.. :humf:


Säkert bara någon skitgrej och det hade varit lite intressant att veta varför den trilskas på det viset som den gör med den där filen, även om nu det andra programmet fungerar. Jag upptäckte nämligen detta med siffrorna av en slump när jag hade hållit på med detta problem i en timme eller två då jag direkt testade den första koden utan siffror och det fungerade.

Det är väl förresten sedan ingen som helst skillnad funktionsmässigt mellan koderna? Tänkte på skillnaden i längd men det är väl bara för att det är skrivet på olika språk.

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 8 juni 2013, 09:23:18
av snigelen
> Men med koden från pot_servo.asm blir det dock "tn10def.inc: No such file or directory".

Det exemplet var skrivet för Atmel-Assembler, du verkar ha det i ett Gcc-projekt. Man kan ha det i ett gcc-projekt och använda assemblern i avr-gcc, men då får man ändra lite på programmet då den har lite annorlunda syntax (och lägga koden i en .S-fil).

Så för det exemplet får man välja "Assembler | AVR Assembler project". Sedan behövs faktiskt inte den include-raden om man använder Studio6, men det gör inget om den står där för då funkar det även i Studio4. (dessutom skulle det nog stå .include instället för #include, men det senare verkar funka också).

> Det är väl förresten sedan ingen som helst skillnad funktionsmässigt mellan koderna? Tänkte på
> skillnaden i längd men det är väl bara för att det är skrivet på olika språk.

Det är lite skillnad.

C-programmet läser i varje loop AD-omvandlaren en gång och tar det värdet (0-255) och multiplicerar med 4, lägger till 988 och lägger ut på PWM-kanal A (OCR0A). På kanal B läggs den "inverterade" servosignalen ut, t.ex om kanal A har 1.2 ms pulsbredd så får kanal B 1.8 ms pulsbredd (och tvärt om).

Assembler-programmet använder bara kanal A och läser AD-omvandlaren fyra gånger och adderar dessa värden (i stället för att ta en läsning gånger 4). Man får väl en liten utjämnande filtreringseffekt av detta. Det kan man ju ganska enkelt ändra C-programmet till också om man vill.

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 8 juni 2013, 14:07:06
av Henry
Jo jag hade det i gcc-projekt eftersom jag trodde att det var den koden du använde när du beskrev hur du hade gjort när det fungerade. Hade väl en känsla av att det skulle vara en skitgrej och visst nu fungerade det förstås och så har man lärt sig det med ifall jag hittar något program som uppför sig på samma sätt.


Aha så det är så programmen fungerar, intressant. Skall nog ta och prova båda och se.

Det kan man ju ganska enkelt ändra C-programmet till också om man vill.

Du har väl inte glömt bort vem du pratar med? :wink:

Hade säkert kunnat lärt mig det rätt snabbt om jag velat då det är väl komenterat och med dina kommentarer om hur det fungerade men det spelar ingen roll som sådant för får jag bara ut en hex-fil från något av det så det går att slänga in det i Tinyn så räcker det för mig.


Nu när det verkar fungera som det skall med det hela så om du har någon Tiny10 över så köper jag gärna några. :)


Jimmy Vad var det förresten för något "omöjligt" kort som du menade innan? :humm:



Tack alla för hjälpen i detta! :)

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 8 juni 2013, 18:08:27
av snigelen
En alternativ while-loop för C-programmet, som lägger ihop fyra ADC-sampel:

Kod: Markera allt

    while(1)
    {
        uint8_t i;
        uint16_t adc4;

        // Take four ADC samples, add them in adc4
        for (i = 0, adc4 = 0; i < 4; i++)
        {
            // Start a conversion
            ADCSRA |= (1<<ADSC);
            // wait until it's finished
            while (ADCSRA & (1<<ADSC))
                ; // Nothing
            adc4 += ADCL;
        }

        // Set PWM to 990 to 2010 ms from ADC.
        OCR0A = 990 + adc4;
        // OCR0B "inverted" servo signal
        OCR0B = 2010 - adc4;
    }
> Nu när det verkar fungera som det skall med det hela så om du har någon Tiny10 över så köper jag gärna några.

Hur många vill du ha? Styck-priset hos Mouser är 6 kr, så det kan du väl få dem för.

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 8 juni 2013, 19:39:24
av JimmyAndersson
Henry:
När jag tänker efter så är jag inte helt säker på att det var ett kretskort.
Men du hade iallafall byggt lager på lager, på höjden med komponenterna klurigt placerade
och tunna koppartrådar mellan dem.

Minns inte hur joule-thief'en såg ut, men jag tror inte att det var den.
Den var iofs också liten och byggd på det sättet. :humm:

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 8 juni 2013, 23:48:13
av Henry
Hmm, ja det är något i bakhuvudet om något sådant långt tillbaka när jag tänker efter men har gjort så många grejer under åren som gått så jag kommer fasen inte ihåg vad det var för något. :humm: Det enda jag kan komma på är en känslig temperaturmätare med LED display jag snickade ihop för många år sedan för den byggde jag i 3 lager har jag för mig, men jag har dock inget minne av att jag lagt upp bilder på den här fast det har jag kanske då.

Fast, det var kanske FM sändarna?

Joule-tjuv har jag gjort några under åren men inget direkt minne att jag lagt upp bilder på de här men inga av de är byggda med lager.


snigelen: kan ta 4 så har jagr 2 i reserv, återkommer på PM och tack för koden. :)

Re: Så liten CPU som möjligt med analog ingång för pot?

Postat: 18 juni 2013, 21:25:38
av JohnA
Jag hoppar över det mesta efter inledningen och slarvarar: När jag sökte extremt billig och fysiskt liten MCU fann jag både PIC och AVR i pytteliten 6-pinnars kapsel. Ungefär samma pris och prestanda vill jag minnas. AVR är det jag känner bäst men ganska snart insåg jag att ATtiny4/5/9/10 är lite udda fåglar i familjen. Slutligen fick det bli tillgång och pris i mindre volymer som avgjorde valet. -Det blev ATtiny13A som man kan få i 50-pack från kina för drygt fyra kronor styck. Verkar vara något av en DIY-favorit med gott om småprojekt och turorials på nätet. SOT-kapseln är ca 5x5mm.