så fik jeg den compilet
og nu laver den da hex filen men stadig lidt problemer med nogle warnings.
prøvede alligevel at smide den på avr men virkede self ikke
Når jeg programmerer en AVR, har jeg slet ikke nogle simulator-værktøjer.
Min fremgangsmåde er cirka følgende:
1: Skriv et lille program, som gør en simpel ting.
2: Få det til at compile.
3: Brænd det over på AVR'en.
4: Se om det fungerer som jeg forventede.
5: Hvis der er fejl, ret fejlene, tilbage til 2
6: Ingen fejl, udvid med næste funktion, tilbage til 2.
I andre tilfælde, når jeg har et større program, hvor jeg skal lave ny funktionalitet, skriver jeg et lille prøve-program, som kun gør den ene ting, og når det virker, fører jeg princippet over i det større program.
avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny44a -c Main.c -o Main.o
Main.c:36: warning: 'SIG_PCINT0' appears to be a misspelled signal handler
Ups, min fejl; jeg fik blandet interrupt-navnene sammen, fordi hvis man bruger den ene type erklæring, skal de navngives i én stil, hvis man bruger en anden type erklæring, skal de navngives i en anden stil.
ISR( ... ) er den anbefalede type erklæring, så den vil jeg så lære fra mig...
Prøv i
Main.c, at ændre...
...til...
ADC.c:54: warning: 'SIG_ADC' appears to be a misspelled signal handler
Prøv i
ADC.c, at ændre...
...til...
Dosing.c:67: warning: implicit declaration of function 'waitSeconds'
Hvor ligger funktionen 'waitSeconds' ?
-Det kunne være en god idé at lægge den ud i sin egen fil, fx. "Wait.c", og så lave prototypen på funktionen i "Wait.h"
Timer0.c:39: warning: 'SIG_OVERFLOW0' appears to be a misspelled signal handler
Prøv i
Timer0.c at ændre...
...til...
Forklaring:
Da ingen af disse interrupt-navne er genkendt, vil de ikke køre.
Derfor vil programmet ikke kunne virke...
1: Timer0-interruptet kører ikke; dvs. sekunderne tæller ikke.
2: ADC-interruptet kører ikke, dvs. vi får ikke værdien fra ADC'en beregnet/opdateret
3: Interrupt0 er ikke installeret, hvilket vil sige at vores start-knap ikke bliver aflæst.
-Med de korrekte navne, skulle det dog have en chance for at blive lidt bedre.
text data bss dec hex filename
1188 2 32 1222 4c6 aquadose.elf
[/quote]
TEXT + DATA = 1190 bytes: Selve programmet kan fint ligge i Flash hukommelsen.
DATA + BSS = 34 bytes: Der er SRAM nok på chippen til både data og stack.
TEXT bliver lagt kun i Flash-hukommelsen.
DATA bliver lagt i Flash-hukommelsen, men når programmet starter op, kopierer det DATA fra Flash over i SRAM'en.
BSS er værdier der starter på 0. Der bliver reserveret plads til dem i SRAM'en.
Har sådan et multimeter
http://australianrobotics.com.au/products/dm830d-lcd-digital-multimeter
så kan ikke rigtigt måle frekvensen "tror jeg"
Hvis du kigger mellem 'diode-symbolet' og 'hFE', er dette så ikke 'frekvens' ? - Det
Sjovt, jeg har selv et DT830B, jeg bruger en del, men det har ikke det symbol.
...Men jeg vil nok prøve at holde udkig og se om jeg kan få fat i et DM830D, da det jo er lidt bedre end mit nuværende (jo, jeg har en Fluke, men den fylder og vejer cirka det dobbelte).
Desuden har jeg konstateret at servoen skal have strøm fra samme enhed som leverer til microcontroleren.
Det kan være jeg tager fejl, men jeg mener det ikke burde være nødvendigt. Hvad der er vigtigt, er at du har sat microcontrolleren's GND til servoens GND.
jeg troede at jeg kunne smide en anden strømforsyning på servoen og så bare få impulserne fra avr men det har jeg testet med en servotester og det kan tilsyneladende ikke lade sig gøre. ved ikke lige hvorfor.
...Hvis man ikke kan, så kan man ikke, men det ville undre mig hvis det er sådan...
Men skaber det problemer når servoen går igang? jeg mener vil det ikke lave en lille forstyrrelse på strømmen til avr, når servo lige pludselig trækker 5 volt?
med mindre jeg kan lave et eller andet trick med f.eks at samle alle gnd
Det kommer helt an på hvor mange Ampere servoen trækker.
Du bør dimensionere din strømforsyning, så den har ampere nok til at trække servoen plus microcontroller.
Et hurtigt gæt er det antal Ampere servoen trækker plus 50 mA til microcontrolleren, plus 50 mA ekstra til dårlige tider.
-Og så skal du nok have en elektrolyt kondensator på før din spændings-regulator, og en efter din spændings-regulator.
Hvis jeg trækker 50 mA på mit board, plejer jeg at bruge 33uF før spændings-regulatoren, og 10uF efter.
Men det vil nok være en god idé at sætte nogle større på.
Hvad jeg ville gøre, er noget i stil med... Start med to stk. 10uF. Det burde ikke være nok til at trække apparatet.
Skift værdien på kondensatorerne op til 33uF, derefter 56 uF, så 82uF, 100uF, ... med lidt spring ind imellem.. Når den så begynder at kunne trække, så hop nogle værdier op, det gør ikke noget du dobler op, med mindre, selvfølgelig at kondensatorerne kommer til at fylde 10 cm i højden og vejer en bondegård.