www.elektronik.si
Začetniški problem v C-ju pri AVR-ju
Pojdi na stran Prejšnja  1, 2, 3, 4 ... 27, 28, 29  Naslednja  :||:
www.elektronik.si -> Osnove programiranja AVR-jev

Avtor: tadej.ko2Kraj: sveta trojica PrispevekObjavljeno: Čet Feb 14, 2008 8:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
z maskami preverjaš podobno kot postavljaš:
ali je bit 5 postavljen?

if(PINB & 0x20)
{
neki();
};


drugače pa: 7 poglavje, 57 stran: http://fides.fe.uni-lj.si/~lrnv/racunalnistvo2/zapiskipredavanj.pdf

Avtor: DomeniusKraj: Medvode PrispevekObjavljeno: Čet Feb 14, 2008 8:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
upornik je napisal/a:
Predvidevam, da je ta "bit_is_clear(x,y)" neka že zapisana funkcija. Je zanjo v Winavr-ju potrebno vključiti katero dodatno knjižnico?

Ne rabiš nobene knjižnice.

Avtor: upornikKraj: Celje PrispevekObjavljeno: Tor Feb 26, 2008 11:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lep pozdrav!

A mi lahko kdo da kakšen nasvet, kako bi na LCD zaslon izpisoval na najbolj enostaven način
vrednosti neke spremenljivke. Napisal sem si funkcijo lcd_izpis("besedilo"), ki pa izpisuje samo
ascii kode.

Koda:
 Primer:

int i;

for(i=0;i<100;i++)
{
_delay_ms(200);
izpis_vrednosti(i);
_delay_ms(200);
}


Torej, upam da ste me razumeli. Potrebujem nasvet, kako si napisati takole funkcijo.

Hvala za odgovore!

Avtor: silvo_vKraj: Domžale PrispevekObjavljeno: Sre Feb 27, 2008 6:08 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz spremenljivke izpisujem takole:

Koda:

void lcd_int (unsigned int val)
{
unsigned char s,d;   // stotice, desetice
unsigned int e;      // enice

  e=val/10;           // enice
  e=e*10;
  e=val-e;

  val=val/10;         // desetice
  d=val/10;
  d=d*10;
  d=val-d;

  val=val/10;         // stotice
  s=val/10;
  s=s*10;
  s=val-s;

  if(s==0) printch(' ');      // ce ni stotic jih ne izpise
  else printch(s+48);         // printch je funkcija za izpis ASCII znaka, ASCII 0 = 48
 
   printch(d+48);
   printch(e+48);
}



Lp

Avtor: upornikKraj: Celje PrispevekObjavljeno: Sre Feb 27, 2008 6:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Super funkcija, hvala Smile

Avtor: dragoonKraj: Trojane PrispevekObjavljeno: Sre Feb 27, 2008 8:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
a takole ne dela:

int var=14;
printf("i=%i",var);



ne vem, ponavadi dela, drugače pa uporabi sprintf...

Avtor: chaosKraj: Zagorje ob Savi PrispevekObjavljeno: Sre Feb 27, 2008 9:35 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz mam v knjižnici takšno funkcijo:

Koda:
static void inline strreverse(char* begin, char* end)
{
   char aux;
   while(end>begin)
      aux=*end, *end--=*begin, *begin++=aux;
}
   
void itoa(int value, char* str, int base)
{
   static char num[] = "0123456789abcdef";
   char* wstr=str;
   if (base<2 || base>16){ *wstr='\0'; return; }
   do *wstr++ = num[value%base]; while(value/=base);
   *wstr='\0';
   strreverse(str,wstr-1);
}


Uporabljaš itoa, strreverse je samo pomožna funkcija. Pretvori poljubno dolg integer, pazit moraš samo, da imaš dovolj prostora v char* str. base je številski sistem -- 2, 8, 10, 16 ...

LP!

Avtor: upornikKraj: Celje PrispevekObjavljeno: Pon Mar 03, 2008 12:48 am    Naslov sporočila:  
----------------------------------------------------------------------------
Spet imam en problem in sicer s Timerjem1. S pomočjo drugih rutin in primerov sem sestavil en programček, da bi z njim oživel timer1 v 16 bitnem načinu. Na zelo podoben način, le z ustreznimi spremembami mi deluje brez problemov Timer0 v 8 bitnem načinu in sem ga že uporabil v eni aplikaciji. Program s Timerjem1 pa se normalno prevede, le deluje ne, zato predvidevam da je nekaj narobe z nastavitvijo.
Uporabljam winavr prevajalnik in AVRmega8515.

Koda:
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>


volatile unsigned char delay;

/* signal handler for timer interrupt TOV1 */

ISR(TIMER1_OVF_vect)
{

TCNT1H=0x00;
TCNT1L=0x00;

delay++;

}

int main(void) {

/* use PortB for output (LED) */

DDRB=0xFF;
PORTB=0xFF;

// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off

TCCR1A=0x00;

// izberemo željeni delilnik   

//1:64
TCCR1B=0b00000011;

 
// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x04;

/*set timer counter initial value*/

TCNT1H=0x00;
TCNT1L=0x00;

ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
   

/* enable interrupts */

sei();


   while(1)
  {
     if(delay==2)
     {
       delay=0;                      //delay postavimo na nič
       PORTB ^= 0xFF;                //komplementiramo portb

     }
   }

}


Hvala za odgovor!

Avtor: PC_MasterKraj: Domžale , Blizu Ljubljane , Poštna 1230 PrispevekObjavljeno: Pet Apr 04, 2008 7:54 am    Naslov sporočila:  
----------------------------------------------------------------------------
Ima kdo kakšno kodo , kjer ko pritisneš Tipko , ledica zasveti , in ko jo pritisneš še enkrat, ledica ugasne?

Hvala.

Avtor: DomeniusKraj: Medvode PrispevekObjavljeno: Pet Apr 04, 2008 9:51 am    Naslov sporočila:  
----------------------------------------------------------------------------
Že prakrat napisano na forumu, malo pobrskaj.

Avtor: PC_MasterKraj: Domžale , Blizu Ljubljane , Poštna 1230 PrispevekObjavljeno: Pet Apr 04, 2008 2:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Na žalost ne najdem nič kar je čisti C pri AvrStudio GCC

Avtor: DomeniusKraj: Medvode PrispevekObjavljeno: Pet Apr 04, 2008 2:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Vem da je nekje napisano kako to narediš v Bascomu - pretvorba v C nebi smela biti zahtevna, če se ti pa zdi da je, boš moral pa še malo potrenirati programiranje.

Avtor: PC_MasterKraj: Domžale , Blizu Ljubljane , Poštna 1230 PrispevekObjavljeno: Pet Apr 04, 2008 6:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Bascom je lahek , problem je kako določen pin definirati in potem kako sploh naredim takole :

Koda:

if PINB.2 = 1 do
   I = NOT I
end


PINB.2 je vhod , I je pa bitna spremenljivka , ki je pač vezana na en izhod.

Sicer ali NOT operacija sploh obstaja pri mikroprocesorjih? Sej alternativo imam že v glavi.

Avtor: jvolkKraj: okolica Divače PrispevekObjavljeno: Sob Apr 05, 2008 12:32 am    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:

if (PINB.2){
   I = !I;
}


To bi moralo delovati. Seveda moreš imet zgoraj definiran I kot ledico.

Avtor: DomeniusKraj: Medvode PrispevekObjavljeno: Sob Apr 05, 2008 12:55 am    Naslov sporočila:  
----------------------------------------------------------------------------
PC_Master je napisal/a:
Sicer ali NOT operacija sploh obstaja pri mikroprocesorjih?

Nekatere stvari bi se zelo (in po nepotrebnem) zakomplicirale, če nebi mikrokontrolerji poznali operacije NOT - to je ena ključnih osnovnih bitnih operaciji.

Stran 3 od 29

Powered by phpBB © 2001,2002 phpBB Group