www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Problem s CodeVision
Pojdi na stran 1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
sortaj
Član
Član



Pridružen-a: Sre 23 Jul 2008 21:51
Prispevkov: 812
Aktiv.: 3.95
Kraj: Med Vipavo in Štanjelom

PrispevekObjavljeno: Sob Feb 06, 2010 3:49 pm    Naslov sporočila:  Problem s CodeVision Odgovori s citatom

Pozdravljeni!

Začel sem se malo ukvarjati z programiranjem AVR-jev (končno Rolling Eyes ) v C-ju
Naložil sem si avrStudio4, CodeVision in WinAvr.
Kombinacija WinAvr/AVRstudio4 nekako uspeva. Napisal sem prve primere in nekako gre(z atMega8).
Sedaj pa bi poskušal še z CodeVision, ker se mi zdi, da se zanj dobi več primerov, nekatere knjižnice so mi bolj razumljive itd...
Pojavi se problem:
Program prevedem in ko ga poskušam naložiti mi javi, da je flash buffer prazen. Ponudi mi možnost naložitve datoteke, pa ne vem, kje naj bi bila... Brick wall oz. kaj naj bi sploh potreboval Question
Po tem mi izpiše še, da je EEPROM buffer prazen in tudi ponudi za datoteko.

Zaenkrat mi ni še jasno točno katere datoteke so potrebne za programiranje (pri studio4 nek makefile itd...), zato me zanima, če veste kaj je narobe?

Kot sem rekel: povezave z programatorjem in miC-jem so OK

Bral sem članke od VolkD, vendar tam ne piše dejansko nič o naložitvi programa (da nisem površno gledal Question )


lp, Jernej

_________________
Svet je bil analogen, dokler ni Planck vsega zafrknil...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
PrimozL
Član
Član



Pridružen-a: Tor 21 Mar 2006 10:55
Prispevkov: 404
Aktiv.: 1.72
Kraj: okolica Vipave

PrispevekObjavljeno: Sob Feb 06, 2010 10:44 pm    Naslov sporočila:   Odgovori s citatom

Živijo Jernej,

Pred časom sem preizkušal tudi vgrajen CVAVR programator z LPT vmesnikom in je precej čudno delal, zato sem opustil vsak up, da dela. Tako program prevedem s CVAVR, v AVR pa ga naložim s PonyProg ali pa z AVRstudio-m. Z AVRstudiom lahko naložiš HEX datoteko (v EXE mapi). Nekje v nastavitvah projekta moraš odkljukat, da ti jo prevajalnik sploh naredi. Ko AVRStudio nekaj teži, da bi naredil projekt, mu dovoliš, kar predlaga.

CVAVR je drugače odličen prevajalnik, s katerim sem naredil tudi par večjih projektov. Tudi brezplačna verzija je za začetek povsem v redu. Ni pa slab niti WinAV.

LP Primož
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
powr
Član
Član



Pridružen-a: Tor 18 Dec 2007 13:20
Prispevkov: 668
Aktiv.: 3.14
Kraj: Postojna

PrispevekObjavljeno: Pon Apr 12, 2010 12:55 am    Naslov sporočila:   Odgovori s citatom

Nov problem s codevisionom.
Ko kliknem gumb build the project mi vrže ven to napako.
Imam dokaj sveže instaliranje xpje in tudi cvavr sem poskusil odstraniti in ponovno namestiti. Ima kdo kak nasvet?



build cvavr.jpg
 Opis:
 Velikost datoteke:  132.14 KB
 Pogledana:  88 krat

build cvavr.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
powr
Član
Član



Pridružen-a: Tor 18 Dec 2007 13:20
Prispevkov: 668
Aktiv.: 3.14
Kraj: Postojna

PrispevekObjavljeno: Sre Apr 14, 2010 11:13 pm    Naslov sporočila:   Odgovori s citatom

Problema še vedno nisem resil. Je kaka ideja al bo potreben ponovni format?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
logist
Član
Član



Pridružen-a: Pon 25 Jan 2010 1:12
Prispevkov: 126
Aktiv.: 0.67
Kraj: dom(o)vina

PrispevekObjavljeno: Ned Avg 08, 2010 12:08 am    Naslov sporočila:   Odgovori s citatom

V SE članku "Prikazovalnik v svetu mikrokontrolerjev - učimo se C skozi male projekte (4)" piše "Časovnik 1 (Timer 1) je v tem programu uporabljen kot generator ure. Za pravilno razumevanje delovanja si je potrebno ogledati še inicializacijo časovnika 1 na sliki 31. Vedeti je potrebno, da je ura mikrokontrolerja nastavljena na 1 MHz. Glede na to, da imamo v spremenljivki "TCCR1B" vpisano vrednost 4, se prekinitev izvaja s frekvenco 125.000 / (255 - 191) Hz. Ob vsaki prekinitvi se v števec vpiše vrednost 0xBF (191 dec)."

Prosil bi da mi kdo razloži kako je avtor prišel do vrednosti 0xBF in zakaj je izbrana prav ta vrednost.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
davide
Član
Član



Pridružen-a: Pet 10 Sep 2010 16:45
Prispevkov: 149
Aktiv.: 0.83
Kraj: Savinjska

PrispevekObjavljeno: Sre Apr 20, 2011 7:18 pm    Naslov sporočila:   Odgovori s citatom

Nimam še večjih izkušenj s tem programom zato me zanima, kako implementirati detekcijo tipke na portu na negativno fronto (ali pozitivno)?
Sem pobrskal po internetu in mi nekako ne dela nobeden od primerov...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
davide
Član
Član



Pridružen-a: Pet 10 Sep 2010 16:45
Prispevkov: 149
Aktiv.: 0.83
Kraj: Savinjska

PrispevekObjavljeno: Sre Jul 20, 2011 7:25 pm    Naslov sporočila:   Odgovori s citatom

Koda:

 if(PINB.1==0) //tipka gor
            {
            delay_ms(10);
                if(menu==1)
                {
                ure++;
                    if(ure==100)
                    {
                    ure=0;
                    }
                delay_ms(200);
                }
                else if(menu==2)
                {
                minute++;
                    if(minute==60)
                    {
                    minute=0;
                    }
                delay_ms(200);
                }

            };


Program je napisan tako da se spremeljivka na lcd zaslonu ure in minute lahko povečujeta ali zamanjšujeta s pomočjo dveh tipk.
Zanima me, zakaj v zgornji kodi, ki je del programa ne prebere drugega pogoja, ko je s pomočjo tretje tipke nastavljen menu=2. Dela samo prvi pogoj, torej ko smo v menu=1 (takoj ob vklopu) lahko nastavljam ure??
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Alex17
Član
Član



Pridružen-a: Ned 28 Feb 2010 21:46
Prispevkov: 476
Aktiv.: 2.56
Kraj: Ljutomer

PrispevekObjavljeno: Sre Jul 20, 2011 8:23 pm    Naslov sporočila:   Odgovori s citatom

Sicer ne delam nič s tem prevajalnikom, ampak C je vseeno C.
Si prepričan, da ima "menu" vrednost 2?
Razen tega lahko daš tudi "navaden" if(Menu==2), saj se v nobenem primeru ne bosta izvedla oba ukaza. Tretja možnost je "navaden" else, če imaš samo dve različni vrednosti spremenljivke menu.

Mogoče še nasvet za prihranek programskega pomnilnika: Delay_ms(10) na začetku ja pomoje nepotreben, saj v vsakem primeru po tem počkaš še 200ms. Iz istega razloga imaš lahko samo en Delay_ms(200) čisto na koncu glavnega if stavka.

Lepše je tudi za določanje zogrnje meje spremenljivk uporabiti operator večje/manjše, saj deluje tudi v primeru neželenih vrednsoti spremenljivke (če slučajno pozaibš nastaviti začetno vrednsot): if(Minute > 59)...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
davide
Član
Član



Pridružen-a: Pet 10 Sep 2010 16:45
Prispevkov: 149
Aktiv.: 0.83
Kraj: Savinjska

PrispevekObjavljeno: Čet Jul 21, 2011 11:12 am    Naslov sporočila:   Odgovori s citatom

Hvala za pomoč,
da je menu postavljen na vrednost dva pa vem iz tega, ker se mi v primeru, da je menu postavljen na dva na lcd zaslonu pojavi strešica pod nastavitvah minut, ampak ne morem pa nastavit minut, to me malo muči, mislim da bi moralo biti s kodo vse vredu, prilepil bom še del kode kjer mi izpisuje ure in minute:
Koda:

lcd_gotoxy(10,0);
      sprintf(hr,"%02d",ure);
      lcd_puts(hr);
      lcd_puts(":");
      sprintf(min,"%02d",minute);
      lcd_gotoxy(13,0);
      lcd_puts(min);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
davide
Član
Član



Pridružen-a: Pet 10 Sep 2010 16:45
Prispevkov: 149
Aktiv.: 0.83
Kraj: Savinjska

PrispevekObjavljeno: Čet Jul 21, 2011 11:14 am    Naslov sporočila:   Odgovori s citatom

Koda:

while (1)
    {

      lcd_gotoxy(10,0);
      sprintf(hr,"%02d",ure);
      lcd_puts(hr);
      lcd_puts(":");
      sprintf(min,"%02d",minute);
      lcd_gotoxy(13,0);
      lcd_puts(min);

      if(menu==0){
      lcd_gotoxy(0,1);
      //lcd_clear();
      lcd_puts("> Start         ");
      }
      else if(menu==1){
      lcd_gotoxy(0,1);
      //lcd_clear();
      lcd_puts("  Start   ^");
      }
      else if(menu==2){
      lcd_gotoxy(0,1);
      //lcd_clear();
      lcd_puts("  Start      ^");
      };


            if(PINB.0==0) //tipka menu
            {
            delay_ms(10);
                if(PINB.0==0)
                {
                menu++;
                    if(menu==3)
                    {
                    menu=0;
                    }
                delay_ms(250);
                }
            };

            if(PINB.1==0) //tipka gor
            {
            delay_ms(10);
                if(menu==1)
                {
                ure++;
                    if(ure==100)
                    {
                    ure=0;
                    }
                delay_ms(200);
                }
                else if(menu==2)
                {
                minute++;
                    if(minute==60)
                    {
                    minute=0;
                    }
                delay_ms(200);
                }

            };

            if(PINB.2==0) //tipka dol
            {
            delay_ms(10);
                if(menu==1)
                {
                ure--;
                    if(ure==-1)
                    {
                    ure=99;
                    }
                delay_ms(200);
                }
                else if(menu==2)
                {
                minute--;
                    if(minute==-1);
                    {
                    minute=59;
                    }
                delay_ms(200);
                }

            };



    }


Tu je še celoten del kode, za morebitno pomoč pri spreminjanju spremenljivke "minute", ki se v tem primeru ne spreminja.
Hvala!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Alex17
Član
Član



Pridružen-a: Ned 28 Feb 2010 21:46
Prispevkov: 476
Aktiv.: 2.56
Kraj: Ljutomer

PrispevekObjavljeno: Čet Jul 21, 2011 3:12 pm    Naslov sporočila:   Odgovori s citatom

Izgleda vse OK. Za vsak slučaj probaj tam, kjer preverjaš tipke, zamenjati s spodnjo kodo. Je sicer enaka, le malo drugače napisana kot tvoja pa vseeno.

Koda:

  if(!PINB.0){

    Delay_ms(10);

    if(!PINB.0){

      if(++Menu > 2) Menu = 0;

      while(!PINB.0);
     
    }

  }
 
  if(!PINB.1){
 
    if(Menu == 1){

      if(++Ure > 99) Ure = 0;
   
    }

    if(Menu == 2){
   
       if(++Minute > 59) Minute = 0;
   
    }
   
    Delay_ms(200);
 
  }
 
  if(!PINB.2){

    if(Menu == 1){

      if(--Ure < 0) Ure = 99;       // če imaš spremenljivko definirano kot "signed (short/int)"
     
      //if(--Ure > 99) Ure = 99;     // če imaš spremenljivko definirano kot "unsigned"  (short/int)

    }

    if(Menu == 2){

      if(--Minute < 0) Minute = 59;     // če imaš spremenljivko definirano kot "signed"

      //if(--Minute > 59) Minute = 59;   // če imaš spremenljivko definirano kot "unsigned"

    }

    Delay_ms(200);

  }
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
davide
Član
Član



Pridružen-a: Pet 10 Sep 2010 16:45
Prispevkov: 149
Aktiv.: 0.83
Kraj: Savinjska

PrispevekObjavljeno: Čet Jul 21, 2011 6:28 pm    Naslov sporočila:   Odgovori s citatom

sem probal zamenjati in je stvar enaka, v if stavku ne pride do pogoja za menu=2 in to mi je zelo čudno, zgoraj, kjer je definirana sprememba "strešice" na zaslonu deluje, ampak ne da se spreminjati spremenljivke min????
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Alex17
Član
Član



Pridružen-a: Ned 28 Feb 2010 21:46
Prispevkov: 476
Aktiv.: 2.56
Kraj: Ljutomer

PrispevekObjavljeno: Čet Jul 21, 2011 8:23 pm    Naslov sporočila:   Odgovori s citatom

Čudna reč. Jaz bi poizkušal po vrsti delati majhne spremembe v programu, da bi približno odkril, kaj je vzrok.
Lahko npr. zamenjaš pogoja za nastavljanje ur in minut - Menu==1 spreminjaš minute, Menu==2 spreminjaš ure in gledaš če se bo situacija ponovila (ne bo šlo nastavljati ur). Če dela prikaz pravilno, je verjetno "menu" definiran pravilno (da ni slučajno bit).
Dokaj neumno se sliši tudi zamenjati vrstni red if stavkov - najprej preveriš, če je Menu==2, po tem pa še ali je Menu==1.
Spremenljivke imaš upam vse pravilno definirane, drugo pa res ne vem kaj bi lahko bil vzrok.

Lahko prilepiš celoten program? Mogoče kdo najde napako. Je vsekakor zanimiv primer.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
davide
Član
Član



Pridružen-a: Pet 10 Sep 2010 16:45
Prispevkov: 149
Aktiv.: 0.83
Kraj: Savinjska

PrispevekObjavljeno: Čet Jul 21, 2011 10:00 pm    Naslov sporočila:   Odgovori s citatom

Koda:

#include <mega8.h>

// Alphanumeric LCD Module functions
#include <alcd.h>
#include <stdio.h>
#include <delay.h>

volatile unsigned int ura_milisekunde=0;
int ura_sekunde=0;
int ura_minute=0;
int ura_ure=0;
char min[2];
char hr[2];
int menu=1;
bit tipka_spuscena;
bit tipka_pritisnjena;
int ure=0;
int minute=0;

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here



}


// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here

ura_milisekunde++;
    if (ura_milisekunde==1000)
    {
    ura_sekunde--;
    ura_milisekunde=0;
        if(ura_sekunde==-1)
        {
        ura_minute--;
        ura_sekunde=59;
            if(ura_minute==-1)
            {
            ura_ure--;
            ura_minute=59;
            }
        }
    }
}

// Declare your global variables here

void rele_vklop(){
PORTC.0=1;}

void rele_izklop(){
PORTC.0=0;}



void main(void)
{
// Declare your local variables here

PORTB=0x07;
DDRB=0x00;
PORTC=0x00;
DDRC=0x01;
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Set
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0xC0;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x7D;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
GICR|=0x40;
MCUCR=0x02;
GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 6
// RD - PORTD Bit 5
// EN - PORTD Bit 4
// D4 - PORTD Bit 0
// D5 - PORTD Bit 1
// D6 - PORTD Bit 2
// D7 - PORTD Bit 3
// Characters/line: 16
lcd_init(16);

// Global enable interrupts
#asm("sei")

while(1){
      //lcd_clear();
      lcd_puts("  Lep pozdrav");
      lcd_gotoxy(2,1);
      lcd_puts("Casovni rele");
      delay_ms(4000);

      lcd_clear();
      lcd_puts("Nast.cas->");
      //lcd_gotoxy(2,1);
      //lcd_puts("  Start");
      //menu=1;


    while (1)
        {
         
          lcd_gotoxy(10,0);
          sprintf(hr,"%02d",ure);
          lcd_puts(hr);
          lcd_puts(":");
          sprintf(min,"%02d",minute);
          lcd_gotoxy(13,0);
          lcd_puts(min);

          if(menu==0){
          lcd_gotoxy(0,1);
          //lcd_clear();
          lcd_puts("> Start         ");
          }
          else if(menu==1){
          lcd_gotoxy(0,1);
          //lcd_clear();
          lcd_puts("  Start   ^");
          }
          else if(menu==2){
          lcd_gotoxy(0,1);
          //lcd_clear();
          lcd_puts("  Start      ^");
          }

               
                if(PINB.0==0) //tipka menu
                {
                //delay_ms(10);
                    if(PINB.0==0)
                    {
                    menu++;
                        if(menu==3)
                        {
                        menu=0;
                        }
                    delay_ms(250);
                    }
                }

                if(PINB.1==0) //tipka gor
                {
                    if(menu==1)
                    {
                    ure++;
                        if(ure==100)
                        {
                        ure=0;
                        }
                    delay_ms(200);
                    }
                    else if(menu==2)
                    {
                    minute++;
                        if(minute==60)
                        {
                        minute=0;
                        }
                    delay_ms(200);
                    }
                }
               

                if(PINB.2==0) //tipka dol
                {               
                    if(menu==1)
                    {
                    ure--;
                        if(ure==-1)
                        {
                        ure=99;
                        }
                    delay_ms(200);
                    }
                    else if(menu==2)
                    {
                    minute--;
                        if(minute==-1);
                        {
                        minute=59;
                        }
                    delay_ms(200);
                    }

                }
               
//                  while(menu==0)
//                  {
//                 
//                  }

    }
 }
}


Oprostite za dolgo kodo, pa tudi vmes je nekaj še neuporabljenih spremenljivk in ostalih zakomentiranih delov.
Hvala za pomoč!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
micabauc
Član
Član



Pridružen-a: Tor 03 Jun 2003 7:12
Prispevkov: 177
Aktiv.: 0.75
Kraj: Celje

PrispevekObjavljeno: Sob Jul 23, 2011 12:21 pm    Naslov sporočila:   Odgovori s citatom

minute--;
if(minute==-1);
{
minute=59;
}
delay_ms(200);
}

}

// while(menu==0)
// {
//
// }


Tole podpičje ne sme bit tam
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3  Naslednja
Stran 1 od 3

 
Pojdi na:  
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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group