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 

En enostaven programček...

 
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
compaq1994
Član
Član



Pridružen-a: Sob 05 Feb 2011 19:38
Prispevkov: 40
Aktiv.: 0.23
Kraj: Kamnik

PrispevekObjavljeno: Sob Dec 21, 2013 12:42 am    Naslov sporočila:  En enostaven programček... Odgovori s citatom

Zdravo imam probem Very Happy

Napisati moram programček v programu Code Vision in ga potem prevesti v Asembler oz. ga napisati takoj v asembler.

Imam tudi ploščico(Attiny 2313) s štirimi tipkami(PIND) in 8 led diodami(PORTB)

1. Led diode gorijo(vseh 8)
2. Pritisnem tipko 1 in jo držim in led diode začnejo utripati(100ms)
3. Tipko spustim, spet gori vseh 8 led diod
4. Pritisnem tipko 2 in jo držim in led diode začnejo utripati(200ms)
5. Tipko spustim, spet gori vseh 8 led diod
6. Pritisnem tipko 3 in jo držim in led diode začnejo utripati(500ms)
7. Tipko spustim, spet gori vseh 8 led diod
8. Pritisnem tipko 4 in jo držim in led diode začnejo utripati(1sekunda)
9. Tipko spustim, spet gori vseh 8 led diod

Trenutno imam v Code Visnu napisano tole, vendar je problem, da mene program čaka, da pritisnem tipke in vse led diode ne gorijo, ima kdo kako idejo?


Koda:

#include <tiny2313.h>
#include <delay.h>


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x9E;

if(PIND.0==1)
    {
    delay_ms(100);
    {
PORTB ^= 0b11111111;
 }
}
if(PIND.1==1)
    {
    delay_ms(200);
    {
PORTB ^= 0b11111111;
   }
 }
if(PIND.2==1)
    {
    delay_ms(500);
    {
PORTB ^= 0b11111111;
 }
}
if(PIND.3==1)
    {
    delay_ms(1000);
    {
PORTB ^= 0b11111111;
 }
}
}


 


// Declare your global variables here

void main(void)
{


// Port B initialization                                       
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0x7F;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x9E;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

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

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

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

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

while (1)
      {
      // Place your code here

      };
}
[/code]
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.53
Kraj: Ljubljana

PrispevekObjavljeno: Sob Dec 21, 2013 11:33 am    Naslov sporočila:   Odgovori s citatom

Samo droben namig:
če imaš LED vezano neposredno iz + na izhod, upoštevaj, da bo svetila le, kadar bo izhod na LOW.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
papagaj93
Član
Član



Pridružen-a: Pon 06 Jun 2011 22:50
Prispevkov: 708
Aktiv.: 4.15
Kraj: Nova Gorica

PrispevekObjavljeno: Sob Dec 21, 2013 12:32 pm    Naslov sporočila:   Odgovori s citatom

Kot je že predhodnik povedal, obrni stanje PORTB v mirovanju.

LP Rok
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
compaq1994
Član
Član



Pridružen-a: Sob 05 Feb 2011 19:38
Prispevkov: 40
Aktiv.: 0.23
Kraj: Kamnik

PrispevekObjavljeno: Sob Dec 21, 2013 1:26 pm    Naslov sporočila:   Odgovori s citatom

Mi lahko poveste v kateri vrstici naj to spremenim, ker sem res začetnik in se še učim , hvala Pray
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.53
Kraj: Ljubljana

PrispevekObjavljeno: Sob Dec 21, 2013 1:48 pm    Naslov sporočila:   Odgovori s citatom

Malo v pomoč:
1. kodo, ki si jo najbrž spisal za uporabo tipk in je sedaj na začetku programa spada na dno v zanko, kjer te v to prepričuje zapis "Place your code here".
2. inicializacija portov B se lahko glasi: PORTB = 0b00000000;
3. izraz PORTB ^= 0b11111111; pomeni alterniranje vrednosti izhodov, ker je uporabljena funkcija "bitwise EOR".
4. tudi tipke so najbrž LOW, ko so pritisnjene!?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Sob Dec 21, 2013 3:59 pm    Naslov sporočila:  Re: En enostaven programček... Odgovori s citatom

Koda:
 1. Led diode gorijo(vseh 8)
2. Pritisnem tipko 1 in jo držim in led diode začnejo utripati(100ms)
3. Tipko spustim, spet gori vseh 8 led diod
4. Pritisnem tipko 2 in jo držim in led diode začnejo utripati(200ms)
5. Tipko spustim, spet gori vseh 8 led diod
6. Pritisnem tipko 3 in jo držim in led diode začnejo utripati(500ms)
7. Tipko spustim, spet gori vseh 8 led diod
8. Pritisnem tipko 4 in jo držim in led diode začnejo utripati(1sekunda)
9. Tipko spustim, spet gori vseh 8 led diod

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

while (1) // Dokler je pogoj znotraj () TRUE, bo delalo to, kar je znotraj {}   //
    {
      // Place your code here
  while(PIND.0==1)
    {
    PORTB ^= 0b11111111;
    delay_ms(100);
    }
  while(PIND.1==1)
    {
    PORTB ^= 0b11111111;
    delay_ms(200);
    }
  while(PIND.2==1)
    {
    PORTB ^= 0b11111111;
    delay_ms(500);
    }
  while(PIND.3==1)
    {
    PORTB ^= 0b11111111;
    delay_ms(1000);
     }
    PORTB = 0b11111111; // Ce ni nic pritisnjeno, pa svetijo vse
}
Jaz sem dal kar while, a tam lahko daš while, ali if.
Če bo while, bo programček krožil samo znotraj {}. Če daš if, bo pa naredil {}, nato pa šel preverit naslednji if. Pri while lahko držiš vse tipke, delal bo pa tisti {}, ki je bil prvi zaznan. Če boš pritisnil vse tipke pri if bo pa zanimiv svetlobni efekt. Malo se igraj.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
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
Stran 1 od 1

 
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