Sida 7 av 11
Postat: 9 september 2004, 18:22:25
av cykze
Kod: Markera allt
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
int main()
{
uint16_t i, j; // Deklarerar variablerna i och j som 16-bitarstal
DDRB = _BV(PB0) | _BV(PB1) | _BV(PB2); //gör PB0 PB1 PB2 till utgångar
while (1)
{
PORTB |= _BV(PB0); //gör PB0 hög
PORTB &= ~_BV(PB1); // gör PB1 låg(varför?) För att vi bara vill visa en färg åt gången. Är båda höga så blir det väl en blandning av två färger.
for (i=0;i<2;i++) //Loopar koden mellan { och } 2 gånger
{
for (j=0;j<1000;j++) // Kör _delay_loop_2() 1000 gånger
_delay_loop_2(1000);//pausar
PORTB ^= _BV(PB0); //gör PB0 låg
}
PORTB &= ~_BV(PB0); //gör PB0 låg
PORTB |= _BV(PB1); //gör PB1 hög
for (i=0;i<2;i++) //??
{
for (j=0;j<1000;j++) //??
_delay_loop_2(1000);
PORTB ^= _BV(PB1); //gör PBlåg
}
}
return 1;
}
for (i=0;i<1000;i++)
{
kod
}
betyder:
1. Starta med i=0
2. Kör koden mellan { och } om i < 1000 . Annars gå till steg 5.
3. Kör i++. Det samma som i = i + 1
4. Gå tillbaka till steg 2
5. Klar
Koden mellan { och } kommer alltså i det här fallet köras 1000 gånger. Om man bara har ett kommando mellan { och } så kan man skippa { och } om man vill.
Tycker att du ska låna valfri bok om C (eller C++) på biblioteket. På så vis lär du dig C från grunden. Det kommer du tjäna mest på.
Postat: 9 september 2004, 21:10:02
av Virr3
okej..
aja.. skulle prova att göra med alla tre färger men det sket sig..
Kod: Markera allt
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
int main()
{
uint16_t i, j;
DDRB = _BV(PB0) | _BV(PB1) | _BV(PB2); //Gör PB0, PB1 och PB2 till utgångar
while (1)
{
PORTB |= _BV(PB0); //gör PB0 hög
PORTB &= ~_BV(PB1);//Gör PB1 låg
PORTB &= ~_BV(PB2);//Gör PB2 låg
for (i=0;i<2;i++)//loop
{
for (j=0;j<1000;j++)
_delay_loop_2(1000); //pause
PORTB ^= _BV(PB0);//Gör PB0 låg
}
PORTB &= ~_BV(PB0)//Gör PB0 låg
PORTB |= _BV(PB1);//Gör PB1 Hög
for (i=0;i<2;i++)//loop
{
for (j=0;j<1000;j++)
_delay_loop_2(1000);//pause
}
PORTB &=~_BV(PB1);//Gör PB1 låg
PORTB|= _BV(PB2);//Gör PB2 hög
for (i=0;i<2;i++)
{
for (j=0;j<1000;j++)
_delay_loop_2(1000);//Pause
}
return 1;
}
är koden..
den går inte att kompilera.. vart sitter felet?
Postat: 9 september 2004, 23:19:56
av rickeboy
Du säger att den inte går att kompilera... okej... vad säger kompilatorn då? (skicka med sådant vid kompileringsfel...)
nyttig läsning:
http://www.cplusplus.com/doc/tutorial/
//Rille
Postat: 9 september 2004, 23:28:11
av rogan
Kod: Markera allt
´
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
int main()
{
uint16_t i, j;
DDRB = _BV(PB0) | _BV(PB1) | _BV(PB2); //Gör PB0, PB1 och PB2 till utgångar
while (1)
{
PORTB |= _BV(PB0); //gör PB0 hög
PORTB &= ~_BV(PB1);//Gör PB1 låg
PORTB &= ~_BV(PB2);//Gör PB2 låg
for (i=0;i<2;i++)//loop
{
for (j=0;j<1000;j++)
_delay_loop_2(1000); //pause
PORTB ^= _BV(PB0);//Gör PB0 låg
}
PORTB &= ~_BV(PB0)//Gör PB0 låg
PORTB |= _BV(PB1);//Gör PB1 Hög
for (i=0;i<2;i++)//loop
{
for (j=0;j<1000;j++)
_delay_loop_2(1000);//pause
}
PORTB &=~_BV(PB1);//Gör PB1 låg
PORTB|= _BV(PB2);//Gör PB2 hög
for (i=0;i<2;i++)
{
for (j=0;j<1000;j++)
_delay_loop_2(1000);//Pause
}
---->>> }
return 1;
}
Vad jag ser så fattas det ett
} på slutet, se markering. Slut på While blocket.
Mvh RA
Postat: 9 september 2004, 23:40:29
av rogan
cykze skrev:
Tycker att du ska låna valfri bok om C (eller C++) på biblioteket. På så vis lär du dig C från grunden. Det kommer du tjäna mest på.
Skulle rekommendera en bok om C, C++ används väldigt sällan på mindre processorer, tar alldeles för mycket resurser i anspråk. Det finns dock C++ kompilatorer, tex IAR och delvis även GCC.
http://www.readit.se har bra priser på lite äldre utgåvor. Man kan hitta
Programmeringsspråket C, ett måste i en C programmerares bibliotek.

Och den är inte så dyr heller.
Mvh RA
Postat: 10 september 2004, 08:56:54
av Virr3
provade att kopilera och fick detta tillbax
Compiling: rodblagron.c
avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=rodblagron.lst -std=gnu99 -Wp,-M,-MP,-MT,rodblagron.o,-MF,.dep/rodblagron.o.d rodblagron.c -o rodblagron.o
rodblagron.c:6: warning: function declaration isn't a prototype
rodblagron.c: In function `main':
rodblagron.c:24: error: called object is not a function
make: *** [rodblagron.o] Error 1
??
ska te stan å kolla på bibblan om jag hittar någon fin bok senare i dag..
Edit: hittade felet.. det ar ett semikolon som saknades..
Postat: 10 september 2004, 22:13:46
av Virr3
Ne nu ger ja f*n upp
skulle prova att sätta i 5 leds.. satte i dom, två av blinkade.
men.
det gick inte att bränna in någon kod längre?
iom att jag har två st avr:er så tänkte jag att det kanske kanske kan vara glapp..
så man tar bort f*nskapet och ett ben trillar av

det är det andra benet..
nu saknar den pinne 1 och 40
nu sitter jag och funderar på att beställa någon färdig byggd..
finns det någon som kan rekomendera någon bra?
ush vad jag blev på dåligt humör
får väll läsa lite i boken jag lånat.. lätt pocket om c-programering...
Postat: 10 september 2004, 22:47:32
av MicaelKarlsson
Ge inte upp!!!!
Tänk på följande "Det som inte dödar, det härdar"
Tryck ner dina AVR i DIL socklar så om du knäcker ett ben på den kostar det dig inte många kronor.
Är det färdigbyggd programmerare av AVR du menar?
Om svaret är ja. Så har jag en enda sak att säga
STK500, då får du massor av saker gratis som en utomordentlig programmerare som stöds till 100% i t.ex. AVRStudio. Den kan programmera alla(tror jag) AVR utom de i TQFP64 med om du vill leka med dem finns STK501.
På Software crew kostar den 895:- vilket är BILLIGAR än
ELFA
Edit: ELFA har ett trevligt
nätaggregat som är användbart lite här och där
Förresten, se det från den ljusa sidan, tänk om det varit ben 10 & 11 som gått av, då hade du suttit med skägget i brevlådan

Postat: 10 september 2004, 22:57:07
av Virr3
har ska inget ges upp

nu har jag fått till bax andan:D mohhaha..
får kolla alla lödningar i morn..
Postat: 10 september 2004, 22:59:45
av MicaelKarlsson
Weeehaaaaa

Postat: 10 september 2004, 23:01:10
av Hedis
När det har hänt så med ic-kapslar så brukar jag ta och trycka ner kretsen i en sockel, stoppa ner en trådstump och löda den emot den lilla lilla yta som fortfarande kan kommas åt på det avbrutna benet.
Har lagat många kretsar på det sättet.
Och jag har själv en STK500, helt underbar. Man sparar så mycket tid genom att bara klicka download i AVRstudio.
Vilka pinnar var det som du inte kunde använda som utgångar? finns några/något ben som är inställt på JTAG. Det kan då inte användas förrens man stängt utav JTAG funtktionen. (måste göras genom fuse-programmering)
Postat: 10 september 2004, 23:03:22
av Virr3
ska kolla data bladet om utgångar och jtag.. återkommer med svar:P
Postat: 10 september 2004, 23:08:38
av MicaelKarlsson
Ur databladet för mega32
Port C is an 8-bit bi-directional I/O port with internal pull-up resistors (selected for each
bit). The Port C output buffers have symmetrical drive characteristics with both high sink
and source capability. As inputs, Port C pins that are externally pulled low will source
current if the pull-up resistors are activated. The Port C pins are tri-stated when a reset
condition becomes active, even if the clock is not running. If the JTAG interface is
enabled, the pull-up resistors on pins PC5(TDI), PC3(TMS) and PC2(TCK) will be activated
even if a reset occurs.
Pinne 1 är
T0 (Timer/Counter0 External Counter Input)
XCK (USART External Clock Input/Output)
Pinne 40 är PA0
Postat: 10 september 2004, 23:19:44
av Virr3
så dom dumpar vi

mohhahaa!
ne men dom är väll inte helt nödvändiga? isåfall får jag väll löda dit lite kopplinsträd istället..
jo föresten.. jag tror att den lilla biten av pinnen som är kvar har kontakt med sockeln
Postat: 11 september 2004, 08:48:25
av frejo