Lite frågor ang. AVR

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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å.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg 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?
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg 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
rogan
Inlägg: 20
Blev medlem: 30 maj 2004, 00:15:08

Inlägg 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
rogan
Inlägg: 20
Blev medlem: 30 maj 2004, 00:15:08

Inlägg 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
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg 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..
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg 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 :cry: 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 :cry:

får väll läsa lite i boken jag lånat.. lätt pocket om c-programering...
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg 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 :lol:
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

har ska inget ges upp :twisted: nu har jag fått till bax andan:D mohhaha..

får kolla alla lödningar i morn..
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Weeehaaaaa :bravo:
Användarvisningsbild
Hedis
Inlägg: 2488
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg 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)
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

ska kolla data bladet om utgångar och jtag.. återkommer med svar:P
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg 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
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

så dom dumpar vi :twisted: 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
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

Skriv svar