|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.83 Kraj: Mengeš
|
Objavljeno: Sob Avg 30, 2014 7:59 pm Naslov sporočila: |
|
|
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 |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.09 Kraj: Dragomer
|
Objavljeno: Sob Avg 30, 2014 8:39 pm Naslov sporočila: |
|
|
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
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 |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.83 Kraj: Mengeš
|
Objavljeno: Sob Avg 30, 2014 9:50 pm Naslov sporočila: |
|
|
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 |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 611 Aktiv.: 4.46 Kraj: Vrhnika
|
Objavljeno: Ned Avg 31, 2014 12:31 pm Naslov sporočila: |
|
|
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 |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.09 Kraj: Dragomer
|
Objavljeno: Ned Avg 31, 2014 12:37 pm Naslov sporočila: |
|
|
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 |
|
|
tiger Član
Pridružen-a: Čet 05 Feb 2004 0:22 Prispevkov: 1138 Aktiv.: 5.12 Kraj: Škofja Loka
|
Objavljeno: Ned Avg 31, 2014 12:40 pm Naslov sporočila: |
|
|
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 |
|
|
Sirij Član
Pridružen-a: Pon 21 Jan 2013 17:14 Prispevkov: 48 Aktiv.: 0.35 Kraj: Središče ob Dravi
|
Objavljeno: Sob Sep 06, 2014 3:49 pm Naslov sporočila: |
|
|
Ž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 |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.53 Kraj: Ljubljana
|
Objavljeno: Sob Sep 06, 2014 6:18 pm Naslov sporočila: |
|
|
Tiny2313 ima samo en port ki ima PCINT.
Poskusi spremeniti PCINT0 v PCINT, bi moralo delati.
LP |
|
Nazaj na vrh |
|
|
Sirij Član
Pridružen-a: Pon 21 Jan 2013 17:14 Prispevkov: 48 Aktiv.: 0.35 Kraj: Središče ob Dravi
|
Objavljeno: Sob Sep 06, 2014 7:57 pm Naslov sporočila: |
|
|
Najlepa hvala. Bom preizkusil. |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.09 Kraj: KOPER
|
Objavljeno: Ned Sep 07, 2014 2:07 pm Naslov sporočila: |
|
|
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 |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.53 Kraj: Ljubljana
|
Objavljeno: Ned Sep 07, 2014 3:06 pm Naslov sporočila: |
|
|
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 |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 611 Aktiv.: 4.46 Kraj: Vrhnika
|
Objavljeno: Ned Sep 07, 2014 3:13 pm Naslov sporočila: |
|
|
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 |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.09 Kraj: KOPER
|
Objavljeno: Ned Sep 07, 2014 3:53 pm Naslov sporočila: |
|
|
[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 |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.83 Kraj: Mengeš
|
Objavljeno: Ned Sep 07, 2014 4:09 pm Naslov sporočila: |
|
|
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 |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5327 Aktiv.: 24.78 Kraj: Domzale
|
Objavljeno: Ned Sep 07, 2014 4:50 pm Naslov sporočila: |
|
|
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 ...
@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 |
|
|
|
|
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
|