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 

Mikro Basic (Števec kovancev)

 
Objavi novo temo   Ta tema je zaklenjena: ne moreš urejati sporočil ali odgovarjati na objave.   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
jarc240
Član
Član



Pridružen-a: Pon 12 Apr 2010 16:41
Prispevkov: 23
Aktiv.: 0.14
Kraj: Lj

PrispevekObjavljeno: Sob Apr 16, 2011 10:51 am    Naslov sporočila:  Mikro Basic (Števec kovancev) Odgovori s citatom

Zanima me par stvari v tem programu, ki sem ga napisal.
Rabil bi nasvet glede ukazov

LCD_init(PortB) "Odvzem informacij iz porta b"
LCD_Cmd(LCD_CURSOR_OF) "Izsklop kurzorjev"
LCD_Out(1,1,Text) "Izspis Texta"

Ti ukazi obstajajo v navodilih saj sem jih dobesedno prepisal iz navodil za
BasicB 2011.Kakor koli, ko debugam mi označi napako na vseh ukazih ki sem jih napisal zgoraj.Najverjetneje je napaka zelo simpl, ker pa nisem vešč programiranja bi lepo prosil za pomoč.

Rad bi še to uprašal kako naj naredim, da se bo prištevala decimalka.
Imel sem namen narediti tako.
1 cent=1 ...
10 centov=10...
1 eu=100...
Pred tem pa že ustvariti piko na zaslonu.
Potem pa z ukazom LCD_Out(n,n,Euro) izspisati Evro dve mesti pred piko.

PRI: 1 cent=(izpis na LCD)... (. 1)
10 centov= (.10)

Rad bi izvedel kako bi vi naredili program za števec kovancev, tudi komentarji, nasveti bi mi zelo pomagali.

PROGRAM

Koda:

program Stetje_kovancev

dim Text as char
dim Evro as char

main:

TrisB=0
TrisA=1

LCD_init(PortB)
LCD_Cmd(LCD_CURSOR_OF)
Text = "EU"
LCD_Out(1,1,Text)

if PortA=1
then Evro = Evro + 1
     Delay_ms(1000)
end if

if PortA=2
then Evro = Evro + 2
     Delay_ms(1000)
end if

if PortA=4
then Evro = Evro + 5
     Delay_ms(1000)
end if

next Evro

LCD_Out(5,1,Evro)

goto main
     
end.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7768
Aktiv.: 34.98
Kraj: Koprivnica HR

PrispevekObjavljeno: Sob Apr 16, 2011 12:10 pm    Naslov sporočila:   Odgovori s citatom

Koda:
LCD_init(PortB)   'Odvzem informacij iz porta b
LCD_Cmd(LCD_CURSOR_OF)   'Izklop kurzorjev
LCD_Out(1,1,Text)   'Izpis Texta"
Micro Basic Help je napisal/a:
Comments
Comments are pieces of text used to annotate a program, and are technically another form of whitespace. Comments are for the programmer’s use only; they are stripped from the source text before parsing.

Use the apostrophe to create a comment:

' Any text between an apostrophe and the end of the
' line constitutes a comment. May span one line only.There are no multi-line comments in BASIC.


Če želiš kakšen komentar na tvoj program, pa boš že malo več napisal.
Napisal si v stilu: "Moj avto je pokvarjen, kako ga naj popravim?" Whistle

Nimamo kristalne krogle!

_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Sob Apr 16, 2011 1:06 pm    Naslov sporočila:  Re: Mikro Basic (Števec kovancev) Odgovori s citatom

main vsebuje inicializacijo portov, lcdja, ... zato naj se izvede samo enkrat.
Glavna Zanka pa potem kroži.

Ne poznam sintakse od [if, else if, else, end if], ampak uporabiti moraš tak else if, da bo delalo tako:
if (prvi pogoj izpolnjen), then
napravi 1
ostalih else if sploh ne preverja več in gre ven iz if stavka

else if (drugi pogoj izpolnjen), then
napravi 2
ostalih else if sploh ne preverja več in gre ven iz if stavka
...
Se pravi, da ob zaznanem izpolnjenem pogoju neha pregledovati ostale pogoje.
Koda:

program Stetje_kovancev

dim Text as char
dim Evro as char
Zastave ' tole je 8 bitna spremenljivka
NovKov ' je pa en bit od Zastave

main:

TrisB=0
TrisA=1

LCD_init(PortB)
LCD_Cmd(LCD_CURSOR_OF)
Text = "EU"
LCD_Out(1,1,Text)
LCD_Out(5,1,Evro)  ' Prvič izpiše

GLAVNAz  ' Glavna Zanka

if PortA=1 then
 Evro = Evro + 1
 NovKov = 1

else if PortA=2 then
 Evro = Evro + 2
 NovKov = 1

else if PortA=3 then
 Evro = Evro + 5
 NovKov = 1

else if PortA=4 then
 Evro = Evro + 10
 NovKov = 1
end if
...
else
 Evro = Evro
 NovKov = 0
end if

if NovKov=1 then
  LCD_Out(5,1,Evro)  ' Izpise samo, ce je bil Nov Kovanec, sicer hitro preverja vhode
  Delay_ms(1000) ' Delay samo, ce je bil Nov Kovanec, sicer sam hitro preverja vhode
  NovKov = 0
end if

goto GLAVNAz
     
end.

NovKov je en bit od spremenljivke Zastave. Naprimer bit Zastave,0 .

_________________
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
Azrael
Član
Član



Pridružen-a: Čet 29 Jan 2009 19:46
Prispevkov: 4432
Aktiv.: 24.01
Kraj: Gorje

PrispevekObjavljeno: Sob Apr 16, 2011 6:37 pm    Naslov sporočila:   Odgovori s citatom

Očitna stvar.

Manjka definicija pinov mikrokrmilnika na katere je priklopljen LCD.

Samo navesti PortB, nikakor ni dovolj, saj prevajalnik ne ve niti katerih 6 pinov tega porta si uporabil in tudi tega ne, na katere pine LCDja so spojeni.

Piše v lepo help-u in v pdf dokumentaciji za MikroBasic.

Glede spremenjivk, poglej katere tipe vse imaš na voljo in uporabi tisto vrsto, ki ti odgovarja.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
jarc240
Član
Član



Pridružen-a: Pon 12 Apr 2010 16:41
Prispevkov: 23
Aktiv.: 0.14
Kraj: Lj

PrispevekObjavljeno: Sob Apr 16, 2011 7:55 pm    Naslov sporočila:   Odgovori s citatom

Sam program je še v razvoju hehehe Smile
Če bi nekdo ki se vsaj malo ukvarja z programiranjem
bo sigurno videl veliko možnih popravkov za program ki sem ga napisal.
Vendar le nekje je treba začeti.
Najbolje bo bilo če bom sam vse skupaj še malo poštudiral tako se bom največ naučil.

ZELO BI MI POMAGAL kakšen link s kakšnimi forami za programiranje.
Tako da če ima kdorkoli kakšne poznane zadeve na spletu naj mi jih pripne v odgovoru.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7768
Aktiv.: 34.98
Kraj: Koprivnica HR

PrispevekObjavljeno: Sob Apr 16, 2011 8:13 pm    Naslov sporočila:   Odgovori s citatom

jarc240 je napisal/a:
Sam program je še v razvoju hehehe Smile
Če bi nekdo ki se vsaj malo ukvarja z programiranjem
bo sigurno videl veliko možnih popravkov za program ki sem ga napisal.
Vendar le nekje je treba začeti.
Najbolje bo bilo če bom sam vse skupaj še malo poštudiral tako se bom največ naučil.

ZELO BI MI POMAGAL kakšen link s kakšnimi forami za programiranje.
Tako da če ima kdorkoli kakšne poznane zadeve na spletu naj mi jih pripne v odgovoru.

LP

Se malo norčuješ?

Mikroelektonika forum

_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Azrael
Član
Član



Pridružen-a: Čet 29 Jan 2009 19:46
Prispevkov: 4432
Aktiv.: 24.01
Kraj: Gorje

PrispevekObjavljeno: Sob Apr 16, 2011 8:57 pm    Naslov sporočila:   Odgovori s citatom

Takole bom rekel: Tvoj "program" je slab, milo rečeno. Že algoritem nisi dobro zastavil. Poglej si primer št. 10 in boš videl kako je tvoj pristop neroden (ko spariš char in byte spremenjivke (in bo rezultat zelo drugačen kot misliš, da bo)):

http://www.mikroe.com/eng/chapters/view/77/pic-basic-book-chapter-4-examples/

Prvič sem se z MikroBasic srečal pred enim tednom, ko sem iskal rešitev malenkost bolj zakompliciranega problema, kot je ta tvoj, o zbirniku pa priznam, pojma nimam (tudi ta tema je v napačnem oddelku, saj je Basic višjenivojski jezik in se pri njem z zbirnikom ne srečuješ kaj omembe veliko).

Kakorkoli že, samo s pomočjo, ki je v programu samem (help datoteka) in dokumentacijo na proizvajalčevi spletni strani, sem problem uspešno rešil prej kot v 24 urah. Pravzaprav bi ga še mnogo prej, če ne bi spregledal ene malenkosti, ki seveda ni bila ravno malenkost, saj je poskrbela, da se je program izvajal 256x počasneje kot sem želel.

Lahko samo rečem, ta programski paket je odlično dokumentiran. Izkoristi ponujeno dokumentacijo, zato je!

Skratka, beri, išči, preizkušaj in se boš veliko naučil. Brez muje se še čevelj ne obuje.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 18.17
Kraj: Črnuče

PrispevekObjavljeno: Sob Apr 16, 2011 9:13 pm    Naslov sporočila:   Odgovori s citatom

Uporabljaš mikrobasic pro ali starejšo različico?

Sintaksa se med n jima rahlo razlikuje.

V Microbasic pro:

Koda:

' Lcd module connections 16F887
dim LCD_RS as sbit at RB4_bit
    LCD_EN as sbit at RB5_bit
    LCD_D4 as sbit at RB0_bit
    LCD_D5 as sbit at RB1_bit
    LCD_D6 as sbit at RB2_bit
    LCD_D7 as sbit at RB3_bit

    LCD_RS_Direction as sbit at TRISB4_bit
    LCD_EN_Direction as sbit at TRISB5_bit
    LCD_D4_Direction as sbit at TRISB0_bit
    LCD_D5_Direction as sbit at TRISB1_bit
    LCD_D6_Direction as sbit at TRISB2_bit
    LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections


Tole poveže ustrezne pine iz mikrokontrolerja na lcd. Seveda moraš uporabiti pine, ki jih imaš povezane.
Potem v main() zanki LCD še inicializiraš:
Koda:

 Lcd_Init()                                ' Initialize Lcd
  Lcd_Cmd(_LCD_CLEAR)                       ' clear display
  Lcd_Cmd(_LCD_CURSOR_OFF)                  ' Cursor off


Nato lahko pišeš na LCD.
Z ukazom

Koda:

  Izpis="Moje besedilo "
  Lcd_out (1,1,Izpis)


Pa seveda moraš PIC-a prej ustrezno nastaviti, da so pini na katerih imaš LCD lepo Digitalni.
Sam v main() zanki kličem initmain() kjer imam potem vpisano odvisno od pica nekaj podobnega temu:
Koda:

sub procedure InitMain
'           76543210
  ANSEL  = %00000010                 ' AN1 (PortA.1 = A/D input)
  ANSELH = %00000000                 ' rest   I/O
  PORTA =  %11111111                 ' 1=input
  TRISA =  %11111111                 ' PORTA = input
  PORTB =  %00000000                 ' PORTB = Output0
  TRISB =  %00000000                 '
  PORTC =  %00000000                 ' PORTC = output
  TRISC =  %00000000                 '
  PORTD =  %00001111                 ' PORTD =output
  TRISD =  %00001111                 '
  PORTE =  %00000000                 ' PORTE =output
  TRISE =  %00000100                 '
  ADCON1 = %00000000                 '
  ADCON0 = %10000100                 ' PORTA.1=AN1
end sub


No o odlični dokumentaciji, ki jo je omenil moj predhodnik se nebi popolnoma strinjal...

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 18.17
Kraj: Črnuče

PrispevekObjavljeno: Sob Apr 16, 2011 9:18 pm    Naslov sporočila:   Odgovori s citatom

Eh sem našel še en kompleten program.
Koda:

program LCD_test


' Lcd module connections
dim LCD_RS as sbit at RB4_bit
    LCD_EN as sbit at RB5_bit
    LCD_D4 as sbit at RB0_bit
    LCD_D5 as sbit at RB1_bit
    LCD_D6 as sbit at RB2_bit
    LCD_D7 as sbit at RB3_bit

    LCD_RS_Direction as sbit at TRISB4_bit
    LCD_EN_Direction as sbit at TRISB5_bit
    LCD_D4_Direction as sbit at TRISB0_bit
    LCD_D5_Direction as sbit at TRISB1_bit
    LCD_D6_Direction as sbit at TRISB2_bit
    LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections

dim txt1 as char[16]
    txt2 as char[9]
    txt3 as char[8]
    txt4 as char[7]
    i    as byte                 ' Loop variable

sub procedure Move_Delay()       ' Function used for text moving
  Delay_ms(500)                  ' You can change the moving speed here
end sub

main:
  TRISB = 0
  PORTB = 0xFF
  TRISB = 0xFF
  ANSEL  = 0                     ' Configure AN pins as digital I/O
  ANSELH = 0

  txt1 = "mikroElektronika"
  txt2 = "EasyPIC6"
  txt3 = "Lcd4bit"
  txt4 = "example"

  Lcd_Init()                     ' Initialize Lcd
  Lcd_Cmd(_LCD_CLEAR)            ' Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF)       ' Cursor off
  Lcd_Out(1,6,txt3)              ' Write text in first row
  Lcd_Out(2,6,txt4)              ' Write text in second row
  Delay_ms(2000)
  Lcd_Cmd(_LCD_CLEAR)            ' Clear display

  Lcd_Out(1,1,txt1)              ' Write text in first row
  Lcd_Out(2,5,txt2)              ' Write text in second row
  Delay_ms(500)

  ' Moving text
  for i=0 to 3                   ' Move text to the right 4 times
      Lcd_Cmd(_LCD_SHIFT_RIGHT)
      Move_Delay()
  next i

  while TRUE                     ' Endless loop
    for i=0 to 7                 ' Move text to the left 8 times
      Lcd_Cmd(_LCD_SHIFT_LEFT)
      Move_Delay()
    next i

    for i=0 to 7                 ' Move text to the right 8 times
      Lcd_Cmd(_LCD_SHIFT_RIGHT)
      Move_Delay()
    next i
  wend
end.


Bo lažje, ker je cela struktura programa.
Pomemben je tudi vrstni red nizanja podatkovnih tipov.
Na vrhu moraš imeti naziv programa, nato sledijo spremenljivke, konstante, podprogrami in nato glavna zanka.

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
PZUFIC
Vseved



Pridružen-a: Sob 17 Nov 2007 19:06
Prispevkov: 6987
Aktiv.: 35.07
Kraj: Rakek

PrispevekObjavljeno: Sob Apr 16, 2011 9:25 pm    Naslov sporočila:   Odgovori s citatom

Mislim, da za kaj veliko učenja in eksperimentiranja nima časa, saj mora izdelek v četrtek delovat. Sam bi napisal tak program v Flowcode v kake pol ure pa bi bilo narejeno in bi delovalo tako kot mora. Sicer ne bi bil tako majhen, ampak vseeno. Dokler nebi znal dobro črkovno in številčno programirati se takega porgrama tik pred zdajci nebi loteval s tem programom, ampak bi ga enostavno izdelal grafično.
_________________
Ne čakaj, da se bo nekaj premaknilo pojdi in nekaj premakni.
Lp Primož
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Azrael
Član
Član



Pridružen-a: Čet 29 Jan 2009 19:46
Prispevkov: 4432
Aktiv.: 24.01
Kraj: Gorje

PrispevekObjavljeno: Sob Apr 16, 2011 10:08 pm    Naslov sporočila:   Odgovori s citatom

Mah ne vem, sem preizkusi brezplačni grafični Great Cow Basic in sem se zaplezal neverjetno hitro. Tudi ta varianta ni čisto enostavna, brez izkušenj. Se pač pozna, da imam z Basicom opravka od nekako leta 1983 (Sinclairjev ZX81).

Če bo avtor teme preučil primer, ki sem ga omenil, ima osnovo za svoj program že narejeno. Ostane mu še, da vkomponira na željeno mesto v izpisu decimalno piko in v program namesto podakov iz ADC vnese svoja števca s pripadajočimi if stavki za vrednost in število kovancev in je na konju.

Tudi za pol ure dela.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
jarc240
Član
Član



Pridružen-a: Pon 12 Apr 2010 16:41
Prispevkov: 23
Aktiv.: 0.14
Kraj: Lj

PrispevekObjavljeno: Ned Apr 17, 2011 10:15 am    Naslov sporočila:   Odgovori s citatom

Jao ste pa res agresivni, ta program sem napisal še preden sem se sploh začel ukvarjati kako ga bom izpeljal.
Bil je samo program, da bi mi vsaj malo svetovali, do zdaj sem ga že dovolj nadgradil.
Če nebi nobenega programa napisal in bi samo rekel "Napišite mi program, ki mi bo štel kovance", bi mi pa rekli... no sej dobro veste kaj.

Če mi ne mislite pomagati ali svetovati o kakšnih zvijačah pa res brez veze
da se sploh oglašate...(PZUFIC,Branez)
Vsem ostalim se pa zahvalujem za pomoč. Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jarc240
Član
Član



Pridružen-a: Pon 12 Apr 2010 16:41
Prispevkov: 23
Aktiv.: 0.14
Kraj: Lj

PrispevekObjavljeno: Ned Apr 17, 2011 10:26 am    Naslov sporočila:   Odgovori s citatom

HVALA Highlag Very Happy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
PZUFIC
Vseved



Pridružen-a: Sob 17 Nov 2007 19:06
Prispevkov: 6987
Aktiv.: 35.07
Kraj: Rakek

PrispevekObjavljeno: Ned Apr 17, 2011 11:18 am    Naslov sporočila:   Odgovori s citatom

Agresiven si ti, ker moraš 3-krat napisati. Že velikokrat smo ti svetovali v šoli vključno s tvojo mentorico, ampak ti ne poslušaš.
_________________
Ne čakaj, da se bo nekaj premaknilo pojdi in nekaj premakni.
Lp Primož
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Ta tema je zaklenjena: ne moreš urejati sporočil ali odgovarjati na objave.   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Č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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group