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 

Programiranje v bascom avr
Pojdi na stran Prejšnja  1, 2, 3 ... 28, 29, 30 ... 36, 37, 38  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Bascom sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
protoncek
Član
Član



Pridružen-a: Sre 31 Jan 2007 9:41
Prispevkov: 9573
Aktiv.: 45.83
Kraj: Mengeš

PrispevekObjavljeno: Sob Avg 30, 2014 7:59 pm    Naslov sporočila:   Odgovori s citatom

Tako nekako. Čeprav niti ne vem, zakaj bi bilo to potrebno...saj bascom sam določa, kam shraniti definirane spremenljivke (na prvo prosto mesto), tako da bi bilo v redu tudi brez vseh teh "AT" . Edino kar je treba pazit je to da če kasneje dodaš spremenljivko, jo dodaj na koncu definicij, ne pa na začetku ali na sredini, ker bi se v tem primeru shranjene vrednosti izgubile - pomešale. To velja v primeru, da imaš že delujočo aplikacijo, pa se odločiš, da bi dodal neko funkcijo...

Jaz bi v tvojem primeru naredil samo takole:
Koda:

Dim Number As Eram String * 13
Dim Number2 As Eram String * 13
Dim Number3 As Eram String * 13


Potem ob prvem programiranju čipa v fusebitih omogočiš funkcijo "preserve EEPROM", tako da ob kasnejšem ponovnem programiranju (popravljanju programa) ohrani vsebino eeproma.

Ne vem, jaz bi rekel da je to uporabno recimo če imaš kakšen kos programa napisan v strojni kodi in le-ta piše direktno v eeprom. V tem primeru moraš seveda vedeti, kje to prebrati v bascomu. Sicer je nepotrebno kompliciranje.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Član
Član



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

PrispevekObjavljeno: Sob Avg 30, 2014 8:39 pm    Naslov sporočila:   Odgovori s citatom

mato1111 je napisal/a:
Koda:
Dim Number As Eram String * 13 At 10


Mi lahko kdo pojasni kakšen pomen ima tukaj At 10 ?


Določanje direktne pozicije spremenljivke v Eramu ima redko smisel.
Ima pa smisel relativno repozicioniranje spremenljivke.

Primer:
Koda:
dim tekst as eram string*20
dim znaki(21) as eram byte at tekst overlay

Na ta način definiram bajte v samem tekstualnem nizu in lahko recimo z
Koda:
znaki(3)
naslovim tretji znak v tekstu.

Seveda gre to tudi brez Erama, v ramu. Celo bolj pogosto se to uporablja v Ramu, kot Eramu.

Osebno, tako vedno sestavljam niz bajt po bajt, ko pride na vhodna vrata UART in ga prestrežem z prekinitvenim podprogramom.
Ko zaznam, da je prišel bajt &H0D ga predelam v &H00 kar pomeni konec niza in potem cel niz predam v obdelavo glavnemu programu.

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Član
Član



Pridružen-a: Sre 31 Jan 2007 9:41
Prispevkov: 9573
Aktiv.: 45.83
Kraj: Mengeš

PrispevekObjavljeno: Sob Avg 30, 2014 9:50 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Osebno, tako vedno sestavljam niz bajt po bajt, ko pride na vhodna vrata UART in ga prestrežem z prekinitvenim podprogramom.


Vilko, za tole idejo ti pa čestitam! Sam se nikoli ne bi spomnil tega sistema. Tako imaš zelo hitro in priročno sestavljen prejet string.... človek vedno izve kaj novega...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 611
Aktiv.: 4.46
Kraj: Vrhnika

PrispevekObjavljeno: Ned Avg 31, 2014 12:31 pm    Naslov sporočila:   Odgovori s citatom

Imam enostaven program ki mi preko UART-a izpisuje na terminal na PC-ju stanje vhoda (vklopljen ali izklopljen).
To naredi vsakič ko gre skozi zanko. Rad pa bi naredil tako da bi mi poslal tekst samo ob spremembi stanja iz 0 v 1 oz. iz 1 v 0, torej ko bi se vhod sklenil bi napisal tekst "vhod sklenjen" samo 1x potem pa bi čakal dokler se vhod ne razklene in potem bi poslal tekst vhod razklenjen.

Koda:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

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

Config Portb.1 = Input

Vhod Alias Portb.1

Do

If Vhod = 1 Then
Print "Vhod sklenjen"
End If

If Vhod = 0 Then
Print "Vhod razklenjen"
End If

Loop
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.09
Kraj: Dragomer

PrispevekObjavljeno: Ned Avg 31, 2014 12:37 pm    Naslov sporočila:   Odgovori s citatom

Se pravi, da ob spremembi na vhodu želiš reakcijo, obvestilo.
Spremembo zaznaš lahko le, če si v neki variabli beležiš staro stanje in ga ob branju novega stanja na vhodu primeraš ali je prišlo do spremembe, in takrat reagiraš in si v variabil ponovno zapomniš staro stanje za primerjanje.

Koda:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

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

Config Portb.1 = Input

Vhod Alias Portb.1
dim ss as bit   ' staro stanje

Do

If Vhod = 1 and ss = 0 Then
Print "Vhod sklenjen"
ss = 1
End If

If Vhod = 0 and ss = 1 Then
Print "Vhod razklenjen"
ss = 0
End If

Loop

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
tiger
Član
Član



Pridružen-a: Čet 05 Feb 2004 0:22
Prispevkov: 1138
Aktiv.: 5.12
Kraj: Škofja Loka

PrispevekObjavljeno: Ned Avg 31, 2014 12:40 pm    Naslov sporočila:   Odgovori s citatom

Dodaj if stavek, ki preverja, če je nov dogodek enak prejšnemu, če ni se izpiše nekaj, če je enako, se nič ne izpiše. Enostavno.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sirij
Član
Član



Pridružen-a: Pon 21 Jan 2013 17:14
Prispevkov: 48
Aktiv.: 0.35
Kraj: Središče ob Dravi

PrispevekObjavljeno: Sob Sep 06, 2014 3:49 pm    Naslov sporočila:   Odgovori s citatom

Že nekaj časa se ukvarjam z uporabo pin change interrupta. Zgledoval sem se po primeru, ki sem ga našel v Bascomovi pomoči (v kodi spodaj je vsavljen med blok komentar), vendar mi bascom v vrstici 24 javi napako 117 (Unknown interrupt [PCINT0]), v vrstici 26 pa napako 85 (Uknown interrupt source [PCINT0]). Namen programa je, da ob pritisku na tipko na pinb.0 prekine utripanje ledice na pinb.1 in za 1 s prižge ledico na pinb.2. Kje je težava?


Koda:

$crystal = 10000000
$regfile = "ATtiny2313.dat"
$hwstack = 32
$swstack = 8
$framesize = 32
Config Clockdiv = 1


Config Pinb.2 = Output
Pinb.2 = 1
Config Pinb.1 = Output
Pinb.1 = 1

'(
Pcmsk = &B00000001                                          'PIN Change Int
ON PCINT0 pin_change_isr
Set Gimsk.5
Enable  Interrupts
')


Pcmsk = &B00000001
On Pcint0 Pcint0_rutina
'Set Gimsk.1
Enable Pcint0
'Enable Interrupt

Do

   Pinb.1 = 0
   Waitms 100
   Pinb.1 = Not Pinb.1

Loop
End

Pcint0_rutina:
   Pinb.1 = 1
   Pinb.2 = 0
   Wait 2
   Pinb.2 = 1
Return
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.53
Kraj: Ljubljana

PrispevekObjavljeno: Sob Sep 06, 2014 6:18 pm    Naslov sporočila:   Odgovori s citatom

Tiny2313 ima samo en port ki ima PCINT.
Poskusi spremeniti PCINT0 v PCINT, bi moralo delati.

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



Pridružen-a: Pon 21 Jan 2013 17:14
Prispevkov: 48
Aktiv.: 0.35
Kraj: Središče ob Dravi

PrispevekObjavljeno: Sob Sep 06, 2014 7:57 pm    Naslov sporočila:   Odgovori s citatom

Najlepa hvala. Bom preizkusil.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1234
Aktiv.: 6.09
Kraj: KOPER

PrispevekObjavljeno: Ned Sep 07, 2014 2:07 pm    Naslov sporočila:   Odgovori s citatom

Tako dela:

Koda:

On Pcint0 Isr_pcint0                                        'we jump to this label when one of the pins is changed
Pcmsk0 = &B00011011                                         'enable pcint0-pcint3  (portb.0-portb.3)
Eimsk = 0
Eicra = &B00000010                                          'rising edge generates interrupt
Enable Pcint0                                               'we enable pcint0 as this has pcint0-pcint7

enable interrupts

'*******************************************************************************
Isr_pcint0:
 Disable Pcint0

  ' tu naredi nekaj
  Enable Pcint0
Return
'*******************************************************************************


_________________
Lep pozdrav iz Kopra Rudi
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.53
Kraj: Ljubljana

PrispevekObjavljeno: Ned Sep 07, 2014 3:06 pm    Naslov sporočila:   Odgovori s citatom

Rudi,
ali si tole preizkusil za Tiny2313?
Pri meni prijavi enako napako kot jo je opisal predhodnik (Bascom 2077).
ATiny2313 nima PCINT0, PCINT1 . . ., ima samo PCINT
LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 611
Aktiv.: 4.46
Kraj: Vrhnika

PrispevekObjavljeno: Ned Sep 07, 2014 3:13 pm    Naslov sporočila:   Odgovori s citatom

Imam izsek iz programa za pošiljanje/prejemanje sms ki mi deluje z eno tel. številko.
Narejen je tako da ko pošljem sms z geslom microcontroller1 si zapomni mojo tel. številko.
Rad bi ga predelal tako da bi si z geslom microcontroller2 zapomnil še drugo številko,
in potem pošiljal povratni sms na tisto številko s katere je dobil sms z ukazom. nekaj sem poizkušal tako da sem dodal Dim Number2 As Eram String * 13 At 24, Dim Pass_stored2 As String vendar ne deluje. prilagam original izsek programa.

Prosim za kakšen nasvet - usmeritev kaj bi moral spremeniti

Koda:

Dim Number As Eram String * 13 At 10
Dim Num As String * 80
Dim Msg As String * 160
Dim Inmsg As String * 160
Dim Gps As Byte
Dim Pass_stored As String * 13


Koda:
 Pass_stored = Number


Koda:
 Print "AT"
      Wait 2
      Print "AT+CMGF=1"                                     'Sprememba v text mode
      Wait 2
      Print "AT+CMGR=1"                                     ' get the message
      Getline

      If Inmsg <> "OK" Then
         Rled = 1
         Gled = 1
         Num = Inmsg
         Getline
         Gps = Split(num , Ar(1) , ",")
         Num = Ar(2)
         Gps = Len(num)
         Gps = Gps - 2
         Num = Mid(num , 2 , Gps)
         Inmsg = Lcase(inmsg) 

 If Inmsg = "microcontroller1" Then                  'Geslo za shranitev številke
             Pass_stored = Num
             Number = Pass_stored
             Msg = "Password 1 Accepted"
             Send_sms

         Elseif Num = Pass_stored Then
             If Inmsg = "light on" Then
                Relay1 = 1
                Status1 = 1
                Num = Pass_stored
                Msg = "Light Switched ON"
                Send_sms
             Elseif Inmsg = "light off" Then
                Relay1 = 0
                Status1 = 0
                Num = Pass_stored
                Msg = "Light Switched OFF"
                Send_sms   



Koda:
 Sub Send_sms
       Rled = 1
          Wait 3
          Print "AT+CMGS=" ; Chr(34) ; Num ; Chr(34)        'pošlji SMS
          Waitms 200
          Print Msg ; Chr(26)
          Wait 5
          Print "AT"
          Wait 2
       Rled = 0
End Sub 


Koda:

 Sub Getline
 Inmsg = ""
 Do
    Gps = Inkey()
    If Gps > 0 Then
       Select Case Gps
        Case 13 : If Inmsg <> "" Then Exit Do               ' Če kaj dobimo
        Case 10 : If Inmsg <> "" Then Exit Do               ' Če kaj dobimo
        Case Else
            Inmsg = Inmsg + Chr(gps)                        ' Naredi string
        End Select
    End If
 Loop

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



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1234
Aktiv.: 6.09
Kraj: KOPER

PrispevekObjavljeno: Ned Sep 07, 2014 3:53 pm    Naslov sporočila:   Odgovori s citatom

[quote="Vlado"]Rudi,
ali si tole preizkusil za Tiny2313?
Pri meni prijavi enako napako kot jo je opisal predhodnik (Bascom 2077).
ATiny2313 nima PCINT0, PCINT1 . . ., ima samo PCINT
LP[/quote

ne vem zakaj uporabljate najmanjši od najmanjših AVRjev. Razlika v ceni ne pokrije
zaj......., kiatero imaš pri implementiranju vseh želja.

preizkušeno deluje na ATMEGA644P.

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Član
Član



Pridružen-a: Sre 31 Jan 2007 9:41
Prispevkov: 9573
Aktiv.: 45.83
Kraj: Mengeš

PrispevekObjavljeno: Ned Sep 07, 2014 4:09 pm    Naslov sporočila:   Odgovori s citatom

ammm...zato, ker ga ima(mo) doma, ostalo bi pa moral kupiti? ali pa mogoče zato, ker je mega644 dimenzijsko bogato večja od tiny-a?

poleg tega je neumno dajati 64k kontroler za 1k kode... tiny-a ni prav nič bolj za=bano programirati kot vse ostale. Kot tudi pri megi644 in ostalih moraš pri tiny-u narediti domačo nalogo in pogledati, kaj ima in kaj nima, pa gre brez problema.

in, nazadnje ...ne vem, če je cena tiny-a slaba dva evra ravno NEPOMEMBNO manjša od mege644, ki stane dobrih 11.24 (cene HTE). OK; če ti ni problem denar metati stran, potem izvoli, ampak mislim da je vseeno manj za=bancije izbrisati ničlo pri INT kot plačati 5x več za mego...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
mucek
Član
Član



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

PrispevekObjavljeno: Ned Sep 07, 2014 4:50 pm    Naslov sporočila:   Odgovori s citatom

Vse je res, ampak ko pride debata na ceno, je ATmega8 (ebay varianta - cena pod 1$!) cenejša od vsakega Tinyja ... Resda me vsakič boli srce, ko dam M8 za kakšno malenkost, ki ima par 10 vrstic kode, a vseeno ...

Tinyji dejansko imajo par grdih "fint", ki jih seveda pogruntaš, ko študiraš datasheet in ugotavljaš, zakaj ti nekaj ne dela ... Smile

@Mato:
Narediti moraš dodatne stringe za dodatne številke in narediti preverjanje (OR) za vse številke. Spodaj kratek odsek s komentiranimi deli, ki sem jih spremenil

Koda:

If Inmsg = "microcontroller1" Then                  'Geslo za shranitev številke
             Pass_stored = Num
             Number = Pass_stored
             Msg = "Password 1 Accepted"
             Send_sms
'   Elseif Inmsg = "microcontroller2" Then
'             Pass_stored2 = Num
'             Number2 = Pass_stored2
'             Msg = "Password 1 Accepted"
'             Send_sms


'         Elseif Num = Pass_stored Or Num = Pass_stored2 Then
             If Inmsg = "light on" Then
                Relay1 = 1
                Status1 = 1
                Num = Pass_stored
                Msg = "Light Switched ON"
                Send_sms
             Elseif Inmsg = "light off" Then
                Relay1 = 0
                Status1 = 0
                Num = Pass_stored
                Msg = "Light Switched OFF"
                Send_sms


LP, Gregor

_________________
...lahko pa se tudi motim ...
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 -> Bascom sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3 ... 28, 29, 30 ... 36, 37, 38  Naslednja
Stran 29 od 38

 
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