Jesli ti to funguje tak dobrý. Někdo ovšem podobnou kalkulačku zkoušel a se zlou se potázal
. Spoléhej na datasheet a mozek.
jo, porovnával jsem s datasheetem a ještě další stránkou a vypadá OK. Teď jsem zkoušel počítat a zobrazovat sekundy a po hodině přesně souhlasí
nahoda jak svina
no jedine zeby si mal 32kHz krištal, a štastie k tomu 
A proč taková náhoda ? Krystal mám 16 MHz.
Ještě jsem se chtěl zeptat - jak zapsat a přečíst číslo typu int do paměti EEPROM. (Chci aby se mi po vypnutí a následném zapnutí zobrazilo.)
Díky za odpověď.
no o kolko sa už roschadza čas zo skustočnym ?
Vdatasheete mas priklaad ako sa zapisuje… Predpokladam ze zapisat nechces ked sa bude vypínať procesor… tj budeš zapisovať niekedy počas behu programu a ked sa vypne a zapne nacita to dane data…
už jsem to dále neměřil, mě bude přesně (na sekundy) stačit cca hodina a v tom už interní oscilátor dělal chybu cca 10 sekund.
Jo, budu zapisovat během programu, po zapnutí si to tyto data natáhne.
Ještě by mi prosím zajímalo - jak je to s frekvencí PWM ? Potřeboval bych nějakou nižší, max. 1kHz
Já mám uděláno TCCR1A=0b10000001; ( Timer1 FASTPWM 8-bit); TCCR1B=0b00001101; (dělička 1024). Frekvence PWM je tedy 16MHZ / 1024 = cca 16 kHz ? Jak ji ještě snížit ?
Díky za info.
Frekvece PWM je Fosc / dělička / délka timeru. Tedy pro 16MHz, 1024 a 8bit (256) => Fosc = 61Hz
aha, tak to takhle stačí
díky
A ještě bych poprosil - neví někdo o nějaké knihovně, která by umožnila lehce zapisovat data na SD kartu - vytvoří soubor .txt a do něj zapisuje na řádky změřenou teplotu ?
Koukám na internet, je tu toho dost, ale rád bych nějakou pokud možno srozumitelnou a na toto málo postačující knihovnu.
Já jsem začínal odsud: dharmanitech.com/2009/01/sd- … fat32.html
Soft je docela přehledný. Já si jej díky tomu upravil k obrazu svému.
Každopádně si najdi datasheet o SD kartách, aby sis mohl některé věci ověřit.
Třeba tento: circlemud.org/~jelson/sdcard … rdv1.9.pdf
Jen ti doporučuji projít si funkce v knihovnách a překopat funkce tak,
aby nemohly měnit své vlastní parametry.
Příklad za všechny:
[code]unsigned long searchNextFreeCluster (unsigned long startCluster)
{
unsigned long cluster, *value, sector;
unsigned char i;
startCluster -= (startCluster % 128); //ZDE JE CHYBA, přepisuje vlastní parametr,
//vznikaly mi tím náhodné chyby
for(cluster =startCluster; cluster <totalClusters; cluster+=128)
{
sector = unusedSectors + reservedSectorCount + ((cluster * 4) / bytesPerSector);
SD_readSingleBlock(sector);
for(i=0; i<128; i++)
{
value = (unsigned long *) &buffer*;
if(((*value) & 0x0fffffff) == 0)
return(cluster+i);
}
}
return 0;
}[/code]
Jsem překopal takto:
[code]
unsigned long searchNextFreeCluster (unsigned long startCluster)
{
unsigned long cluster, *value, sector;
unsigned int i;
for(cluster = startCluster-(startCluster % 128); cluster < totalClusters; cluster+=128)
{
//přepočítá adresu clustru na fyzický sektor, který následně načte do paměti
sector = BSPosice + PartitionPosice + ((cluster * 4) / bytesPerSector);
SD_readSingleBlock(sector);
//druhý cyklus se pohybuje uvnitř sektoru a hledá první neobsazený
for(i=0; i<128; i++)
{
value = (unsigned long *) &MyPage*;
if(((*value) & 0x0fffffff) == 0)
return(cluster+i);
}
}
return 0;
}[/code]
administrator: přiloženy externí soubory**
SDCardStandardv1.9.pdf (1.12 MB)
Taky jsem zacal odtamtud, je to docela hezky vysvetlene a udelat zapojeni taky neni slozite. Zkousel jsem to i na nepajivem poli a fungovalo. Zkousel jsem se koukat i na petifFatFs elm-chan.org/fsw/ff/00index_p.html kde jsou priklady pro mensi i vetsi system, ale nejak se mi nepozdavalo to zapojeni, je na me moc slozite…
To ze jsou tam chyby, jsi docela borec, ze jsi na neco takoveho prisel, ja jsem jenom takovy uzivatel a protoze mi to neblbne a nebo ze zrovna tuhle cast nepouzivam tak jsem to neresil. Ale taky jsem si to upravil, protoze to nesmyslne zabere cely port a pritom staci zabrat jen ty piny, co pouziva…
Tak jsem si nakonec stáhnul knihovnu z této diskuze mikrocontroller.net/topic/105869, knihovna zde
mikrocontroller.net/attachment/101158/0.6.2.zip
Knihovna vypadá dobře, zabírá málo paměti.
Spustím vzorový příklad, v Project - Configuration Options nastavím frek. proc. na 16MHZ, nic jiného neměním, nahraju do mikroproc, spustím a nic to nedělá. Je potřeba u toho vzoru něco více nastavovat ?
Mimochodem změřil jsem napětí na SD kartě - je napájena z LM33Z, před ním kondík 100nF, za ním 2,2 uF - dává z 5V 3,3 V a to jde do karty. Po připojení SD karty ale dává 3,6 až 3,7 V. A zdá se mi ,že proud teče dokonce opačným směrem (ne z Vcc na gnd, ale obráceně) asi 1uA. Čím to může být ? Karta je stále živá 
oprava: napájení je ze stabilizátoru LE33CZ (z 5V na 3,3V)
Hoď sem to schématko, podle kterého jsi to dělal.
Nějak ho na tom odkazu nemohu najít.
Jen ještě dotaz… máš na výstupech z MCU dělič napětí nastavený tak,
aby do SD karty šlo pouze těch 3,3V ?
(tedy pokud MCU nenapájíš také 3,3V)
Já jej mám nastavený na 3V a vše je v pohodě.
EDIT: Mimochodem já také používám LE33 a vše je OK.
Teď jsem dal stabilizátoru ještě paralelně zátěž odpor (1,7kohm) a napětí se ustálilo na 3,29 V i s SD kartou.
SD se zapojuje na MISO, MOSI, SCK, SS.
Schéma je cca zde mikrocontroller.net/articles/AVR_FAT32, ten HC4050 tam nemám - místo něj odporový dělič. Kondík je na výstupu z LE33. I když někde jsem našel že má být co nejblíže kartě.
Mám tam děliče z 3,3kohm a 1,8kohm. Je ale na nich spíše 3,7 V. Jak mám provést MISO - já jsem na něj dal odpor 1,8k a do procesoru (ten je na 5V). Je to tak dobře ?
Díky za rady
Odporový dělič máš v pořádku. Možná by však v tvém případě neuškodilo změnit 1,8K na 2,7k.
Na MISO žádný odpůrek dávat nemusíš, pokud dodržíš že na pinu procesoru zůstane vysoká impedance.
Jinak ten kondík za LE33 já mám jen 1,0uF.
Přesto však vytáhni SD kartu a změř napětí na prázdno
(a to i zemi, jestli ji nemáš přerušenou).
Já prostě takové broblémy neměl. Spíš mi připadá,
že tam máš nějaký napěťový svod.
P.S. Odkud jsi?
Tak já zkusím ještě přeměřit to napětí.
Teď na to zkouším jít jinak - s procesorem na 3,3V. Takže dám místo 16 MHz krystalu 8MHz, přepíšu to v AVR v Project - Configuration Options na 8Mhz. Ale když dám build active configuration, tak mi to stále v Buildu píše
avr-gcc -mmcu=atmega168 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields atd.
Takže to stále počítá s 16MHZ nebo co ?
Pak vyměním krystal a program mi funguje, ale teploměr mi neměří teplotu (hlaásí nula) 
Kde může být chyba ? Díky za pomoc.
A zajímavý že když nechám program napsaný na 8MHz a v zapojení nechám 16MHz krystal tak program jde a i teploměry. Takže tu frekvenci zřejmě nemám zcela změněnu ? Pojistky neměním, ty jsou stejné pro 8-16 MHz.
P.S. jinak jsem z Prahy
Teď tu mám problém - mám knihovnu, v ní je např.
class SDCARDclass {
…
}
a to asi překladač nezná a vypíše mi
…/SDCARD.h:47: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘SDCARDclass’
Jde do AVR Stuida něco přidat, aby to znal a přeložil ?
Díky za rady.