Sida 1 av 2
WinAVR, tiny2313 och DS18B20
Postat: 2 januari 2006, 03:09:27
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?
Postat: 2 januari 2006, 08:53:15
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.
Postat: 2 januari 2006, 11:38:58
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.
Postat: 2 januari 2006, 11:55:30
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.
Postat: 2 januari 2006, 12:09:26
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.
Postat: 2 januari 2006, 12:12:47
av $tiff
Vad händer? Kan du inte kompilera bara för att du har multiplikation i ditt program?
Postat: 2 januari 2006, 12:16:43
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.
Postat: 2 januari 2006, 12:42:36
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.
Postat: 2 januari 2006, 12:51:32
av $tiff
Antingen är det en bug, eller så har du missat att deklarera rätt processor överallt (kompilator, assembler, programmerare).
Postat: 2 januari 2006, 13:05:34
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.
Postat: 2 januari 2006, 13:08:38
av cykze
Har du så att du kan visa koden? Det skulle vara intressant att se vad multiplikationen gör för nytta.
Postat: 2 januari 2006, 13:17:22
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å.
Postat: 2 januari 2006, 13:22:51
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å.
Postat: 2 januari 2006, 13:24:41
av PaNiC
Quite so..
Problemet nu är att jag har hårdvara som koden inte får plats i >(.
Postat: 2 januari 2006, 13:28:07
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
