WinAVR, tiny2313 och DS18B20

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

WinAVR, tiny2313 och DS18B20

Inlägg av PaNiC »

Detta tycks vara en svår kombination.
All 1wire-kod jag har hittat använder funktioner som tiny2313 inte har stöd för (multiplikation osv).

Har någon lyckats lösa detta?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

"...som tiny2313 inte har stöd för (multiplikation osv)" ?????

En µC kan definitivt multiplicera! Det finns kanske ingen inbyggd matteprocessor men då löser man det i mjukvara!

PIC t.ex. har ju ett begränsat antal olika instruktioner och där går det helt fint att dividera och multiplicera.

Sen behöver 1Wire protokollet inget sånt, det behöver lite shiftning & EXOR osv men det är allt.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

All kod jag har hittat använder multiplikation för att räkna ut delayer.

Och jag vet att en µC kan multiplicera i mjukvara, så alternativt söker jag hur fasen man får WinAVR att inte använda hårdvarufunktionen.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

> All kod jag har hittat använder multiplikation för att räkna ut delayer.

Om dom gör det så sker den multiplikationen med största sannolikhet när du kompilerar programmet, och inte av AVR:en, eftersom det troligtvis är konstanter som multipliceras.

> Och jag vet att en µC kan multiplicera i mjukvara, så alternativt söker jag hur fasen man får WinAVR att inte använda hårdvarufunktionen.

avr-gcc använder sig av hårdvaruinstruktionen om AVR:en stöder, annars sker det i mjukvara. Det är mao inget man behöver tänka på själv.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

> Om dom gör det så sker den multiplikationen med största sannolikhet när du kompilerar programmet, och inte av AVR:en, eftersom det troligtvis är konstanter som multipliceras.

Ingalunda, multiplikationerna sker under gång i dessa funktioner. µCn ges endast en konstant i form av klockfrekvensen och räknar ut resten under drift.

> avr-gcc använder sig av hårdvaruinstruktionen om AVR:en stöder, annars sker det i mjukvara. Det är mao inget man behöver tänka på själv.

Det är testat, så sker inte.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Vad händer? Kan du inte kompilera bara för att du har multiplikation i ditt program?
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Ach, så går det när man förklarar olika saker på olika forum..

Jag får ett error när jag ska programmera µCn om att koden inte passar i aktuell µC. Det är verifierat att det beror på multiplikation eftersom att jag så fort jag lägger till multiplikation av en variabel i koden så får jag meddelandet. Multiplicerar jag konstanter så görs detta mycket riktigt i kompileringen.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

> Ingalunda, multiplikationerna sker under gång i dessa funktioner. µCn ges endast en konstant i form av klockfrekvensen och räknar ut resten under drift.

Det finns ingen anledning till varför det ska ske i runtime. Vad är det för kod du använder?

> Jag får ett error när jag ska programmera µCn om att koden inte passar i aktuell µC. Det är verifierat att det beror på multiplikation eftersom att jag så fort jag lägger till multiplikation av en variabel i koden så får jag meddelandet. Multiplicerar jag konstanter så görs detta mycket riktigt i kompileringen.

Det låter som en bug i så fall. Jag har nästan för mig att jag har läst om den buggen. Prova att ladda ner den senaste versionen av WinAVR, om du inte redan kör den.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Antingen är det en bug, eller så har du missat att deklarera rätt processor överallt (kompilator, assembler, programmerare).
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Problemet är hittat mha en väldigt duktig kompis.
Jag har varit helt off, det var nämligen inte riktigt så som jag trodde..

Visserligen hade det att göra med multiplikation, men inte på sättet som jag trodde. Problemet var helt enkelt att funktionerna för multiplikation ger så in i helvetes mycket kod så det får helt enkelt inte plats.

Har aldrig råkat ut för det innan, så jag tänkte inte ett dugg åt det hållet.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Har du så att du kan visa koden? Det skulle vara intressant att se vad multiplikationen gör för nytta.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Vid närmare eftertanke så är jag bara så fullständigt ovan och okunnig i C så jag har tolkat det mesta fel från början. * tolkar jag omedelbart som en matematisk operation, men den kan ju ha andra funktioner också.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Jaha, det kan ju förklara saken. :) * används också för att deklarera pekare och därefter för att komma åt värdet som pekaren pekar på.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Quite so..

Problemet nu är att jag har hårdvara som koden inte får plats i >(.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Jag hoppas du har mycket mer än att läsa av en DS1820 i programmet, annars är det ganska otympligt skrivet på 2k :wink:
Skriv svar