|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
tadej.ko2 Član
Pridružen-a: Sre 17 Okt 2007 18:26 Prispevkov: 76 Aktiv.: 0.38 Kraj: sveta trojica
|
|
Nazaj na vrh |
|
|
Domenius Član
Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.33 Kraj: Medvode
|
Objavljeno: Č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. _________________ It's electric! |
|
Nazaj na vrh |
|
|
upornik Član
Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.17 Kraj: Celje
|
Objavljeno: 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! |
|
Nazaj na vrh |
|
|
silvo_v Član
Pridružen-a: Pon 11 Jul 2005 22:00 Prispevkov: 146 Aktiv.: 0.66 Kraj: Domžale
|
Objavljeno: 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 |
|
Nazaj na vrh |
|
|
upornik Član
Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.17 Kraj: Celje
|
Objavljeno: Sre Feb 27, 2008 6:55 pm Naslov sporočila: |
|
|
Super funkcija, hvala |
|
Nazaj na vrh |
|
|
dragoon Član
Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.19 Kraj: Trojane
|
Objavljeno: 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... _________________ LP, Mitja |
|
Nazaj na vrh |
|
|
chaos Član
Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.96 Kraj: Zagorje ob Savi
|
Objavljeno: 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! |
|
Nazaj na vrh |
|
|
upornik Član
Pridružen-a: Ned 09 Jan 2005 22:35 Prispevkov: 261 Aktiv.: 1.17 Kraj: Celje
|
Objavljeno: 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! |
|
Nazaj na vrh |
|
|
PC_Master Član
Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.63 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: 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. |
|
Nazaj na vrh |
|
|
Domenius Član
Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.33 Kraj: Medvode
|
Objavljeno: Pet Apr 04, 2008 9:51 am Naslov sporočila: |
|
|
Že prakrat napisano na forumu, malo pobrskaj. _________________ It's electric! |
|
Nazaj na vrh |
|
|
PC_Master Član
Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.63 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Pet Apr 04, 2008 2:17 pm Naslov sporočila: |
|
|
Na žalost ne najdem nič kar je čisti C pri AvrStudio GCC |
|
Nazaj na vrh |
|
|
Domenius Član
Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.33 Kraj: Medvode
|
Objavljeno: 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. _________________ It's electric! |
|
Nazaj na vrh |
|
|
PC_Master Član
Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.63 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: 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. |
|
Nazaj na vrh |
|
|
jvolk Član
Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.34 Kraj: okolica Divače
|
Objavljeno: 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. |
|
Nazaj na vrh |
|
|
Domenius Član
Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.33 Kraj: Medvode
|
Objavljeno: 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. _________________ It's electric! |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 70 dni
Powered by phpBB © 2001, 2005 phpBB Group
|