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 

ATmega8 - težave
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 8:12 pm    Naslov sporočila:   Odgovori s citatom

lahko dve... Very Happy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5333
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 8:19 pm    Naslov sporočila:   Odgovori s citatom

Koda:

'DEFINICIJA "STROJNE OPREME" - TO VEDNO NAREDIŠ NAJPREJ!!!

$regfile = "m8def.dat"
$crystal = 12000000

Config Portd = Output                                       'Zaradi preglednosti daj skupaj npr. izhode in nato skupaj vhode
Config Portb = Output

Config Pinc.5 = Input : Tipka_rst Alias Pinc.5              'Aliase se vedno piše za definicijo porta (input)
Config Pinc.0 = Input : Tipka1 Alias Pinc.0                 'Zaradi preglednosti jih sam pišem vedno kar v isto vrstico
Config Pinc.1 = Input : Tipka2 Alias Pinc.1                 ' (dvopičje je za Bascom isto, kot bi šel pisat v novo vrstico)
Config Pinc.2 = Input : Tipka3 Alias Pinc.2
Config Pinc.3 = Input : Tipka4 Alias Pinc.3

Config Debounce = 30

Const Timer0reload = 54                                     'Tudi definicije interruptov, adc itd. spada sem.
Config Timer0 = Timer , Prescale = 1024
Load Timer0 , Timer0reload
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0

'-------------------------------------------------------------------------------
'DEFINICIJA SPREMENLJIVK - TO NAREDIŠ KASNEJE (ZA HW) - Stringe daj vedno na konec!

Dim Eni1 As Word
Dim Des1 As Word
Dim Des As Word
Dim Eni As Word

Dim I As Word : I = 0                                       'začetna vrednost spremenljivke I
Dim J As Byte : J = 0                                       ' začetna vrednost spremenljivke J
Dim K As Byte


'****************************** GLAVNI PROGRAM ****************************************************

Enable Interrupts


Do                                                          'Do-loop zanka naj bo čim enostavnejša in preglednejša!
  If Tipka_rst = 1 Then                                     'Čimveč pomeči ven v podprograme!
     I = 0
     J = 0
  End If

  Debounce Tipka1 , 1 , Dodaj , Sub
  Debounce Tipka2 , 1 , Dodaj , Sub
  Debounce Tipka3 , 1 , Dodaj1 , Sub
  Debounce Tipka4 , 1 , Dodaj1 , Sub

  Gosub Racunaj
Loop
'************************ PREKINITVENA RUTINA****************************************************

'SUBI
Dodaj:
   If Tipka1 = 1 Then Incr I                                'da se pisati tudi enostavne IF stavke :)
   If Tipka2 = 1 Then Decr I
Return

Dodaj1:
     If Tipka3 = 1 Then Incr J
     If Tipka4 = 1 Then Decr J
Return

Racunaj:
  Eni = I Mod 10
  Des = I Mod 100
  Des = Des / 10

  Eni1 = J Mod 10
  Des1 = J Mod 100
  Des1 = Des1 / 10

  Portd = Lookup(i , Stevilke)
  Portb = 0

  If K = 0 Then                                             'Ker K hkrati ne more imeti 4 vrednosti, je bolje delati "elseif": tako se naslednji stavki sploh ne izvedejo,
      Set Portb.3                                           'če je npr. pravilen že prvi pogoj.
      Portd = Lookup(des1 , Stevilke)
  Elseif K = 1 Then
      Set Portb.2
      Portd = Lookup(eni1 , Stevilke)
  Elseif K = 2 Then
      Set Portb.1
      Portd = Lookup(des , Stevilke)
  Elseif K = 3 Then
      Set Portb.0
      Portd = Lookup(eni , Stevilke)
  End If
Return



Timer0_isr:                                                 'V interrupt rutinah moraš imeti ČIMMANJ!!! Ti imaš tule cel roman!
Load Timer0 , Timer0reload                                  'Sem ti zmetal zadeve, ki se lahko delajo izven interrupta v
   Incr K                                                      'subrutino "Racunaj", ki se kliče iz Main-a
   If K > 3 Then K = 0
Return


'***************************TABELA VREDNOSTI ŠTEVILK ZA SEGMENTE*****************************************
Stevilke:
'       0      1      2      3      4      5     6      7
Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7C , &H07 , &H7F , &H67

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5333
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 8:20 pm    Naslov sporočila:   Odgovori s citatom

Še datoteka za direktno delo - preimenuj v .bas!

Malo preglej samo strukturo "mojega" programa in se jo v prihodnje poskusi držati. Nepregleden program = slab program.

Lp, g



test.txt
 Opis:

Download
 Ime datoteke:  test.txt
 Velikost datoteke:  3.6 KB
 Downloadano:  8 krat


_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 9:22 pm    Naslov sporočila:   Odgovori s citatom

štetje je normalno, se je pa pojavilo da gorijo segmenti, kateri bi morali biti ugašnjeni nekje z 30% svetlosti vklopljenega segmenta. Ob pritiskih, ko se števec spreminja, se tudi oni spreminjajo( bi morali biti ugašnjeni) eni so pa ugašnjeni kot treba
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.67

PrispevekObjavljeno: Pet Nov 29, 2013 9:27 pm    Naslov sporočila:   Odgovori s citatom

linel je napisal/a:
kako pa pogledam v register reseta? ( po datasheetu sem pogledal in je to register 0x000 ali?

Poglej v datasheet in išči MCUCSR register. Pa pozorno preberi obnašanje tega registra, ker ni dovolj, da samo prebereš vrednost.

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5333
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 9:28 pm    Naslov sporočila:   Odgovori s citatom

Kako imaš vezane izhode? (preko tranzistorja, direktno? Če prvo - daj shemo pokaži, da ti ne manjka kak pull down)

Lp, g

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5333
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 9:30 pm    Naslov sporočila:   Odgovori s citatom

Portd = Lookup(i , Stevilke)
Portb = 0

If K = 0 Then 'Ker K hkrati ne more imeti 4 vrednosti, je bolje delati "elseif": tako se naslednji stavki sploh ne izvedejo,
Set Portb.3 'če je npr. pravilen že prvi pogoj.
Portd = Lookup(des1 , Stevilke)
Elseif K = 1 Then
Set Portb.2
Portd = Lookup(eni1 , Stevilke)
Elseif K = 2 Then
Set Portb.1
Portd = Lookup(des , Stevilke)
Elseif K = 3 Then
Set Portb.0
Portd = Lookup(eni , Stevilke)
End If

Daj tole v interrupt rutino ...

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.52
Kraj: Ljubljana

PrispevekObjavljeno: Pet Nov 29, 2013 9:41 pm    Naslov sporočila:   Odgovori s citatom

Grega,
menim da še vedno ne bo v redu.
Gorijo segmenti ki nebi smeli:
Citiram:
If K = 0 Then 'Ker K hkrati ne more imeti 4 vrednosti, je bolje delati "elseif": tako se naslednji stavki sploh ne izvedejo,
Set Portb.3 'če je npr. pravilen že prvi pogoj.
Portd = Lookup(des1 , Stevilke)
Elseif K = 1 Then
Set Portb.2 'TU JE TREBA POSTAVITI PORTB.3=0 (tudi ostale)
Portd = Lookup(eni1 , Stevilke)
Elseif K = 2 Then
Set Portb.1
Portd = Lookup(des , Stevilke)
Elseif K = 3 Then
Set Portb.0
Portd = Lookup(eni , Stevilke)
End If

Ukaz Set Portb.x bi jaz zamenjal z
portb=&B00000001 ' &B00000010, 00000100, 00001000

V prejšnji kodi portb.x spremeni vrednost na 0 samo ko prešteje vse cikle, ko je K=0.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Sob Nov 30, 2013 10:32 am    Naslov sporočila:   Odgovori s citatom

mucek, mislim da z tem tvojim programom je tudi nekaj narobe. Vezava je sigurno dobra ker z mojim programom ne gorijo segmenti ki nebi smeli šteje pa normalno ( razen občasno mu nekja pride in je vse na 0).
Jedro oz. pomagalo mojega programa je pa vaja6 pri 7 seg prikazovalnikih, ki ste jih uporabljali na bascom začetnem seminarju ( leto 2008 ali 2009) prosim če pogledaš. tam je tudi računanje in vse v prekinitveni rutini..

Vlado, sem tudi to probal, nič boljše..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.52
Kraj: Ljubljana

PrispevekObjavljeno: Sob Nov 30, 2013 11:32 am    Naslov sporočila:   Odgovori s citatom

Zakaj ti je tako težko pripeti načrt? Pripni tudi primer po katerem si delal in svoj celoten program. Ugibati je težko.

Preden postaviš novo vrednost na Portd moraš ugasniti vse segmente, postaviš Porb.x (ampak samo tega katerega rabiš, ostali morajo biti izklopljeni) in potem postaviš vrednost za Portd (vrednost za prikaz). Potem ti ne bodo prižgani segmenti ki nebi smeli biti.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.04
Kraj: Dragomer

PrispevekObjavljeno: Sob Nov 30, 2013 11:38 am    Naslov sporočila:   Odgovori s citatom

Vlado je napisal/a:

Ukaz Set Portb.x bi jaz zamenjal z
portb=&B00000001


Ukaz
Koda:
Set portb.0

ni adekvaten ukazu
Koda:
Portb=&B00000001

temveč morda le ukazu
Koda:
portb = portb or &B00000001


Ta, ta drugi ukaz postavi vse bite na 0 le bit 0 postavi na 1.

Treba bo vedeti, kaj programer hoče in izbrati pravega od dveh.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Sob Nov 30, 2013 12:12 pm    Naslov sporočila:   Odgovori s citatom

prilagam shemo vezja, ter program z katerim sem si pomagal,in še moja koda ( sem še probal z kristalom 8mhz)

še video z delovanjem mojega programa, na koncu sem postavil vrednosti na nič sam z tipko.


video semaforja z mojim programom


p.s.: vezje imam sicer v kovinskem ohišju, ki je ozemljeno. ko je vezje izven ohišja ( na mizi) se resetira manj krat. je možno da kaj motijo napajalne žice 230V AC ?



7_seg_pink_ponk_stevec.rar
 Opis:

Download
 Ime datoteke:  7_seg_pink_ponk_stevec.rar
 Velikost datoteke:  26.52 KB
 Downloadano:  4 krat


vaja6.rar
 Opis:

Download
 Ime datoteke:  vaja6.rar
 Velikost datoteke:  1.22 KB
 Downloadano:  2 krat


stetje_z_tipko_koncano_atmega8.rar
 Opis:

Download
 Ime datoteke:  stetje_z_tipko_koncano_atmega8.rar
 Velikost datoteke:  868 Bytov
 Downloadano:  3 krat

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



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Ned Dec 01, 2013 7:18 pm    Naslov sporočila:   Odgovori s citatom

Zanima me, če lahko preberem vrednost registra za nazaj (so kake nastavitve da se vrednost tega registra kje shranijo ob resetu?) , če izklopim napajanje. Namreč, mikrokontroler bi moral fizično izvlečti iz podnožja na vezju in ga dati v razvojno ploščo, da bi potem lahko prebral vrednost registra MCUCSR, preko uarta.

Sedaj sprobavan na razvojni plošči z drugim mc branje registra MCUCSR.

koda za branje je pa taka:


Koda:

 $regfile = "m8def.dat"
 $crystal = 8000000
 $baud = 19200

 $hwstack = 32
 $swstack = 8
 $framesize = 24


Dim R As Byte

R = Mcucsr


Do
   Print Bin(r)
   Waitms 300
Loop


Ko sprogramiram čip in se program začne izvajat, dobim vrednost registra 00000111, kar je vredu (mislim da), ker watch dog timer (četrti bit) imam izklopljen , če pa izklopim napajanje in vklopim nazaj, se pa pojavi vrednost 00000101, data sheet pravi da pride do zunanjega reseta.

Če pa dam reset pin na gnd da bi resetiral mc, se samo ustavi izvajanje mc, vrednost registra mcucsr pa je ob delovanju dalje 00000111.

ali vredu izvjam branje registra ali bi moral kako drugače?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.67

PrispevekObjavljeno: Ned Dec 01, 2013 7:59 pm    Naslov sporočila:   Odgovori s citatom

datasheet je napisal/a:
To make use of the Reset Flags to identify a reset condition, the user should read and then reset the MCUCSR as early as possible in the program. If the register is cleared before another reset occurs, the source of the reset can be found by examining the Reset Flags.

Sem ti rekel, da pozorno preberi. Wink

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Ned Dec 01, 2013 8:55 pm    Naslov sporočila:   Odgovori s citatom

Se pravi da preberemo register, ter takoj za tem ga resetiramo? če sem prav razumel (da vidimo pri katerem bitu je prišlo do spremembe? sem na dobri poti ali streljam mimo? Think

Koda:

Dim R As Byte

R = Mcucsr

Do

   Print Bin(r)
   Waitms 300
   Reset Mcucsr
Loop
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 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: 69 dni


Powered by phpBB © 2001, 2005 phpBB Group