Någon som jobbat med ATTiny och V-USB?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av bearing »

Vet inte om det går att ändra standard osccal, men man kan som sagt skriva ett nytt värde i början av main.

Jag har själv aldrig sett något program som ändrar fuse-bitarna vid programmering. avrdude tar ju olika argument för att skriva fuses och hex-filen.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Hmm, intressant vore att läsa av Fuses i AVR Studio på de båda CPU'erna och se om det är någon skillnad. Så ska jag göra.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Förresten, skulle det kunna funka att ändra trialValue?

Kod: Markera allt

static void calibrateOscillator(void)
{
uchar       step = 128;
uchar       trialValue = 0, optimumValue;
int         x, optimumDev, targetValue = (unsigned)(1499 * (double)F_CPU / 10.5e6 + 0.5);
 
    /* do a binary search: */
    do{
        OSCCAL = trialValue + step;
        x = usbMeasureFrameLength();    // proportional to current real frequency
        if(x < targetValue)             // frequency still too low
            trialValue += step;
        step >>= 1;
    }while(step > 0);
    /* We have a precision of +/- 1 for optimum OSCCAL here */
    /* now do a neighborhood search for optimum value */
    optimumValue = trialValue;
    optimumDev = x; // this is certainly far away from optimum
    for(OSCCAL = trialValue - 1; OSCCAL <= trialValue + 1; OSCCAL++){
        x = usbMeasureFrameLength() - targetValue;
        if(x < 0)
            x = -x;
        if(x < optimumDev){
            optimumDev = x;
            optimumValue = OSCCAL;
        }
    }
    OSCCAL = optimumValue;
}
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av bearing »

EDIT3: nu ramlade polletten ner för mig. algoritmen i funktionen ovan är det inget fel på. Däremot fungerade funktionen aldrig för mig, kanske berodde det på att det tog för lång tid att hitta rätt frekvens, så att datorn hann "ge upp" innan dess. Jag experimenterade mig fram till rätt OSCCAL-värde istället, och satta det i början av main().

Strunta i resten av inlägget.


Den där funktionen spolade jag helt. Funkade inte för mig. Jag ser inte hur den skulle kunna funka särskilt bra heller. Den testar först 128, och om det är för lågt testar den 192. Men vad händer om 192 är för högt? då testas inte lägre värden, om jag förstår rätt. Då fortsätter den i tron att rätt värde är 192+-1 och testar därför 191,192 och 193 för att finna det optimala.

EDIT: och dessutom bryter den mot en regel i databladet, nämligen att OSCCAL inte får ändras i för stora steg eftersom att det kan sabba exekveringen av nästa instruktion. EDIT2: nu blev jag osäker på om den regeln gäller PIC eller AVR, kan hända att jag blandat ihop, så ta inte det här stycket för sant.

Testa att byta ut do..while-loopen och startvärdena till följande:
/* do a binary search: */
trialValue = 128;
step = 64;
do{
OSCCAL = trialValue;
x = usbMeasureFrameLength(); // proportional to current real frequency
if(x < targetValue) // frequency still too low
trialValue += step;
else
trialValue -= step;
step >>= 1;
}while(step > 0);
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Testade din kod men det gick inte bättre det. Inte så konstigt med tanke på vad Fuse-undersökningen gav:

Kod: Markera allt

Fungerande:

spien satt

bod disabled

inget annat ibockat

pll clock, startuptime pwrdwn/reset:1k ck/14 +4ms

Ext 0xff

high 0xDF

low 0xc1



Ej fungerande:

spien satt

bod disabled

inget annat ibockat

Int RC OSc 8MHz, startuptime pwrdwn/reset:6ck/14 +64ms

Ext: 0xFF

High: 0xDF

Low: 0x62
När jag ändrade Fuses i den ickefungerande till att se ut som i den fungerande så funkar det! :)
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Och då kommer nästa utmaning: V-USB, ATTiny2313 utan kristall. Hittar inget projekt där det har gjorts, undrar om det går?
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av bearing »

Det svåra är förmodligen att få plats med koden. 12.8 MHz-versionen tar mest plats av alla versioner, har jag för mig. Annars ser jag ingen anledning till att det inte skulle funka.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Det där är en grundläggande detalj jag inte har fått kläm på än... Hur väljer jag kodversion? Och hur vet jag vilken jag behöver? De projekt jag har gjort hittills har jag baserat på befintliga projekt, och då använt samma MCU.

Annars är väl 2313 ett lite dumt val i sammanhanget... Den har gott om portar så att man kan haka på massa grejer, och kan använda ISP, men det blir inte mycket minne över.
Nackdelen med ATTIny 25/45 är ju att det är få pinnar, USB och ISP kolliderar och man har tre pinnar till externa komponenter. Vet inte om det är så stor idé att lägga möda på 2313. Nog för att jag har några liggande, men det är kanske bättre att vänta in de ATMega8 som är på väg från Kina...
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av bearing »

Om allt funkar som det är tänkt borde det bara vara att ändra de två första raderna i makefilen när man byter processor och klockfrekvens. Sannolikt behöver man också ändra i usbconfig.h för att konfigurera I/O mm. usbconfig.h innehåller gott om kommentarer som beskriver vad varje inställning är till för.

Kod: Markera allt

DEVICE  = atmega168
F_CPU   = 16000000	# in Hz
I vusb-20090822\tests\sizes-reference finns filer med listor över minimumkodstorlek för olika versioner av V-USB samt kompilator.

Kod: Markera allt

sizes-20090415-gcc4.3.2.txt:
                              Variation Flash   RAM    +F  +RAM
                    Minimum_with_16_MHz  1224    45    +0    +0
                    Minimum_with_12_MHz  1274    45   +50    +0
                  Minimum_with_12_8_MHz  1594    45  +370    +0
                    Minimum_with_15_MHz  1330    45  +106    +0
                  Minimum_with_16_5_MHz  1346    45  +122    +0
                Minimum_with_18_MHz+CRC  2298    45 +1074    +0
                    Minimum_with_20_MHz  1206    45   -18    +0
                  With_usbFunctionWrite  1284    45   +60    +0
                   With_usbFunctionRead  1280    45   +56    +0
         With_usbFunctionRead_and_Write  1318    45   +94    +0
               With_usbFunctionWriteOut  1246    45   +22    +0
           With_Interrupt_In_Endpoint_1  1358    57  +134   +12
  With_Interrupt_In_Endpoint_1_and_Halt  1448    57  +224   +12
     With_Interrupt_In_Endpoint_1_and_3  1466    69  +242   +24
                With_Dynamic_Descriptor  1250    45   +26    +0
                    With_Long_Transfers  1302    47   +78    +2
Såvitt jag förstått behöver man inte använda INT0-pinnen för V-USB. Om jag förstått rätt kan man använda PCINTx som interruptkälla, vilket betyder att vilken pinne som helst kan användas. Men jag är inte säker, för ett PCINT triggas av alla flanker, man kan inte välja om det ska va uppgående eller nedgående.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av snigelen »

Men varför vill du inte ha kristall? 4.95 st hos en av annonsörerna på EF + två kondingar för i princip ingenting. Så det är väl knappast en ekonomisk fråga.

Fördelen med tiny25/45/85 är ju att de har en PLL att skrämma upp klockfrekvensen med. Är 25:an för trång kan man ju gå upp till 45 eller 85.

Enda fördelarna med t2313 är väl fler pinnar och uart. Men 2k flash är ju i minsta laget och utan PLL är det lite svårt att pressa upp interna klockan i 12MHz (Kan hända att det går men jag tror inte det är rekomenderat).

Vill du nödvändigtvis ha tiny och ingen kristall kan du ju kika på tiny261/461/861 som har PLL och lika många pinnar som 2313 (men ingen uart :( ).

Annars är som sagt mega8 och dess efterföljare trevliga, men även de saknar PLL så en extern hyfsat noggrann klockmatning behövs väl, t.ex en kristall.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Hade någon idé om att bygga så enkelt och billigt som möjligt, gillade enkelheten i 25/45-kretsara utan kristall. Men om varken 2313 eller Mega8 går att köra utan med V-USB så är det väl bara att ge upp den tanken om man vill ha mer pinnar.
tiny261/461/861 låter spännande, 461 borde ju vara ett bra alternativ.
Så man kanske ska satsa på tiny25 för de enklaste byggena, typ ljussensor, extra volymkontroll, ledlampa deluxe och sånt. Till de lite mer avancerade projekten som till exempel väderdatasamlare blir det nog Mega8 eller tiny461. Synd bara att 461an inte finns hos Electrokit...

Jag har förresten hittat en lösning på ett av problemen jag hade tidigare. Jag trodde att jag förstört ett 2313 genom att sätta fel fuses, men så var nog inte fallet. Jag bytte 2313 i kretsen, kopplade upp kretsen till min Usbtiny och läste av signaturen med Avrdude, vilket fungerade. Sen gjorde jag samma övning med AVR Studio och AVRISP mkII, vilket inte fungerande. Men lite tankeverksamhet fick mig att prova att ställa om AVRISP:en till en lägre klockfrekvens (250kHz istället för 1MHz), och då fungerar det. 2313 är va jag förstår fabriksinställd på en låg klockfrekvens vilket gör att klockfrekvensen i AVRISP:en måste ställas ned, den ska ju vara max 1/4-del av MCU:ns frekvens.
perra_e
Inlägg: 983
Blev medlem: 13 februari 2009, 16:26:53
Ort: Jönköping

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av perra_e »

Behöver du ATtiny461 finns det billiga hos Swechtrading.
http://swechtrading.se/zencart/index.ph ... Path=59_75
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Ahh där fanns dom, tack! Satt och grämde mig för en stund sedan att det bara fanns en enda på hela Ebay...
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av PHermansson »

Har nu testat en del med Tiny461 och det funkar bra. Har en liten fundering dock:
En enhet som använder en Tiny25 utan kristall funkar bra om den kopplas till en USB-hubb med egen nätdel.
Kopplas samma enhet direkt till datorn USB-port fungerar den inte (device not accepting address 69, error -62).
En enhet som använder Tiny461 med kristall fungerar bra både inkopplad till hubben och direkt till datorn.
Är det något som skiljer förutom strömmen? Är USB-spänningen så skräpig att det stör ut kretsen?
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Någon som jobbat med ATTiny och V-USB?

Inlägg av bearing »

Är kretsen avkopplad på rätt sätt?
Får du olika spänning över kretsen via hub jämfört med via dator?
Skriv svar