|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
MojsterMiha Član
Pridružen-a: Ned 09 Nov 2008 20:28 Prispevkov: 14 Aktiv.: 0.07 Kraj: Ormož
|
Objavljeno: Ned Maj 12, 2013 1:41 pm Naslov sporočila: Arduino 2560 in prekinitve - interrupt |
|
|
Pozdravljeni
V programiranju sem začetnik z veliko volje, ki pa mi počasi že pojenja, ko naletim na takšne težave:
Na arduinotu 2560 želim sprogramirati čisto enostavno prekinitev, ki bi prižigala in ugašala dve led diodici. Prekinitev generiram z encoderjem.
Do sem vse lepo in prav in zadeva tudi deluje, dokler v programček ne vstavim zanke Do - Loop.
Takrat prekinitev več ne deluje. Takoj ko odstranim zanko spet dela.
Kje ga biksam?
Vsaka pomoč mi bo prihranila veliko živcev...
Hvala vsem
$regfile = "m2560def.dat"
$crystal = 12000000 ' generated. Take care that the chip supports all fuse bytes.$PROG &HFF,&HE3,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Portc = Output
Config Portd = Input
Cha Alias Pind.3
Chb Alias Pind.2
Config Chb = Input
Config Cha = Input
'''''''''''''''''''''''''''''''''''''''''''''
Led0 Alias Portc.5
Led1 Alias Portc.3
Enable Interrupts
Enable Int4
'Config Int4 = Falling
On Int4 Prekinitev
Do
''ko vstavim zanko Prekinitev več ne dela !!!!!!!!
Loop
Prekinitev:
If Chb = 0 Then
Set Led0
Reset Led1
Else
Reset Led0
Set Led1
End If
Return
End
|
|
Nazaj na vrh |
|
|
skalpel Član
Pridružen-a: Tor 31 Jan 2012 19:46 Prispevkov: 432 Aktiv.: 2.90 Kraj: Šenčur
|
Objavljeno: Ned Maj 12, 2013 2:25 pm Naslov sporočila: |
|
|
Zakaj ne uporabiš bolj preproste kode?
Koda: |
int ledPin1 = 13;
int ledPin2 = 12;
void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop()
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
delay(1000);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
delay(1000);
}
|
|
|
Nazaj na vrh |
|
|
MojsterMiha Član
Pridružen-a: Ned 09 Nov 2008 20:28 Prispevkov: 14 Aktiv.: 0.07 Kraj: Ormož
|
Objavljeno: Ned Maj 12, 2013 3:04 pm Naslov sporočila: |
|
|
Vse kar mi je do sedaj uspelo sprogramirati je bilo v BASCOM-u
Skalpel, tvoj primer je izven mojih zmožnosti
Pa saj ne gre toliko za sam program, pač pa za tisti firbec zakaj NE DELA!
|
|
Nazaj na vrh |
|
|
skalpel Član
Pridružen-a: Tor 31 Jan 2012 19:46 Prispevkov: 432 Aktiv.: 2.90 Kraj: Šenčur
|
Objavljeno: Ned Maj 12, 2013 3:13 pm Naslov sporočila: |
|
|
Imaš vse pravilno nastavljeno?
|
|
Nazaj na vrh |
|
|
MojsterMiha Član
Pridružen-a: Ned 09 Nov 2008 20:28 Prispevkov: 14 Aktiv.: 0.07 Kraj: Ormož
|
Objavljeno: Ned Maj 12, 2013 3:50 pm Naslov sporočila: |
|
|
Hja, upam.
Če v programu ni zanke Do - Loop dela kot je treba.
Takoj ko pa vstavim zanko (tudi če v njej ni nič) pa prekinitve več ne delajo.
|
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Ned Maj 12, 2013 4:27 pm Naslov sporočila: |
|
|
Sicer Bascoma ne poznam ne vem kako, vendar ali ne bi moral biti End takoj za Do-Loop in ne na koncu?
Vsaj v Helpu za Bascom je tako:
Opis: |
|
Velikost datoteke: |
36.36 KB |
Pogledana: |
16 krat |
|
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
MojsterMiha Član
Pridružen-a: Ned 09 Nov 2008 20:28 Prispevkov: 14 Aktiv.: 0.07 Kraj: Ormož
|
Objavljeno: Ned Maj 12, 2013 5:09 pm Naslov sporočila: |
|
|
Tudi z End takoj po zanki sem poskušal, pa tudi ne gre.
Pravzaprav, če postavim End pred Prekinitev potem le ta sploh ne dela (tudi če ni zanke)
|
|
Nazaj na vrh |
|
|
Pobesneli Član
Pridružen-a: Sre 02 Jan 2008 1:24 Prispevkov: 1070 Aktiv.: 5.39 Kraj: Ajdovščina
|
Objavljeno: Ned Maj 12, 2013 5:26 pm Naslov sporočila: |
|
|
Program gre v do-loop zanko in iz nje ne gre več, v njej pa ni nič. Mogoče ti zaradi tega ne dela?
V help v bascom pise v primerih:
Do
!Nop
Loop
Nisem ne testiral in ne prakticiral. Poskusi pa porocaj
|
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Ned Maj 12, 2013 5:34 pm Naslov sporočila: |
|
|
@MojsterMiha: s čim pa sprožiš prekinitev?
Kakor vidim iz tvojega programa ne greš nikoli v prekinitveno rutino.
End mora biti za Do-Loop, kajti tukaj je konec programa. Prekinitev je podprogram!
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
MojsterMiha Član
Pridružen-a: Ned 09 Nov 2008 20:28 Prispevkov: 14 Aktiv.: 0.07 Kraj: Ormož
|
Objavljeno: Ned Maj 12, 2013 7:41 pm Naslov sporočila: |
|
|
Jaka, prav imaš!
Sedaj ko sem malo bolj natančno pogledal vezavo in datasheet sem ugotovil, da prekinitve ne sprožim, ker imam vezano na pin, ki je INT3 in ne INT4 kot sem mislil.
Seveda je takoj po odpravi napake steklo....
Malo sem jezen sam nase, obenem pa vesel, ker zadeva deluje.
Hvala vsem...
|
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Tor Feb 16, 2016 6:08 pm Naslov sporočila: |
|
|
Skoraj 3 leta kasneje ...
Naletel sem na čisto brezvezno mino v zvezi s pini.
Imam Mega 2560 ploščico in nanjo pritrjeno svojo ploščico. Vsi pini so povezani in imajo neko funkcijo.
Enkoder sem vezal na Arduino pina 14 in 15, ki sta na Atmel-u fizično vezana na port J00 in J01. Njuni funkciji v procesorju sta PCINT9 in PCINT10 (pin change interrupt ...). Zadostuje mi ena prekinitev.
Problem je v tem, da Arduino okolje za 2560 predvideva prekinitve samo na Arduino pinih
2, 3, 18, 19, 20, 21 .
Ali se da to zadrego rešiti programsko ali s predelavo knjižnice (katere?), ali moram prekinjati sledi po tiskanini in po zraku narediti prevezavi in zamenjavi naprimer med pinoma 15 in 18 (ki sta sorazmerno blizu)
https://www.arduino.cc/en/Reference/AttachInterrupt DODAJANJE PREKINITEV
https://www.arduino.cc/en/Main/ArduinoBoardMega2560 LASTNOSTI MEGA PLOŠČICE
Dodajam:
V
C:\Program Files\Arduino\hardware\arduino\avr\variants\mega
je datoteka pins_arduino.h , kjer so definirane povezave med pini procesorja in Arduino pini. Kako spremeniti digitalPinToInterrupt , da bo prekinitev na pinu 13 ?
Kar spremenim eno 18 v ==13 in malo pogoljufam?
Še <= 13 moram odstraniti iz povsod ... in jo nadomestiti z <= 12 ...
Joooj ... 15, ne 13 !! Eh, no ... popravljam v prvotno stanje ...
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Tor Feb 16, 2016 6:36 pm Naslov sporočila: |
|
|
igo mogoče tole oz. tole?
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Tor Feb 16, 2016 8:29 pm Naslov sporočila: |
|
|
Hvala.
Sicer se mi zdi, da bi tudi moja predelava morala delovati, ker je sorazmerno podobna, a imam trenutno še bolj odbito težavo . Par sekund po tistem, ko sem prej napisal "popravljam v prvotno stanje ..." je zmanjkalo elektrike.
Do jutri dopoldne naj bi odpravili okvaro ... vsekakor sporočim rezultate predelave.
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Sre Feb 17, 2016 7:07 pm Naslov sporočila: |
|
|
Univerzalni programerji in spolnost ...
JE[samocenzura]EM VAM univerzalne programerje, ki pišejo univerzalne knjižnice za cel kup različnih MCU in osnovnih ploščic, da vse skupaj postane nepregledno in med seboj navzkrižno povezano in večkrat definirano !!!
Normalen programer za vsak MCU napiše samo 3 knjižnice.
Prvo, CORE2MCU.h , ki predefinira notranje oznake drobovja (strojne naslove registrov, portov, ...) v razumljive kratice iz datasheeta in naprej na zunanje pine MCU. Pri PIC MCU-jih je to v .inc datoteki vse na enem mestu.
Drugo, FUN2PIN.h , ki z zaporedjem zbirniških ukazov dodeli pinu ustrezno funkcijo (ADC, PWM, INT, vhod, izhod, ...).
Tretjo, MCU2BRD.h , ki pravzaprav samo predefinira vsako številko MCU pina v številko na osnovni ploščici (naprimer Atmega2560 MCU pin 97 je na Arduino Mega 2560 ploščici preimenovan v pin ADC0). Kdor bi MCU naspajkal na svojo ploščico, bi naredil svojo, ali pa tudi ne (če ne bi bila namenjena množični prodaji ali univerzalni uporabi).
Uporabnik bi potem zvlekel dol obe knjižnici za svoj MCU in knjižnico za ploščico (če je kupil že kompletek, ne le golega MCU) in začel normalno delati.
V Setup() bi samo nametal funkcije iz FUN2PIN in definiral funkcijo vsakega uporabljenega pina. Ostali, neuporabljeni, bi bili vhodi z aktivnimi pull-up, ali nekaj, kar ne troši toka in ne pobira motenj iz okolice.
Take knjižnice bi bile vitke (brez ifndef, ifdef, switch, ... include medsebojno navzkrižno sklicevanje, ... nesnage) in absolutno optimizirane (beri: Ni čudno, da bo Microchip kupil Atmel). V njih bi bili vsi ukazi, da bi lahko potem razni programerji po svetu s pomočjo tistih ukazov lahko izdelovali ostale namenske knjižnice za GLCD, serial595, serial485, Touch, EEPROM, 1-wire, ...
V glavnem sem po 100 spremembah na 100 mestih, kupih errorjev, zaradi navzkrižne povezanosti definicij,... vse skupaj povrnil v prvotno stanje (sem delal kopije) in uporabil knjižnico iz druge povezave, ki jo je zgoraj pripel Jaka57 . (Tista iz prve povezave ima zame preveč čuden način uporabe.)
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.89 Kraj: Grosuplje
|
Objavljeno: Sre Feb 17, 2016 9:05 pm Naslov sporočila: |
|
|
igo je napisal/a: |
Univerzalni programerji in spolnost ...
=BEM VAM univerzalne programerje, ki pišejo univerzalne knjižnice za cel kup različnih MCU in osnovnih ploščic, da vse skupaj postane nepregledno in med seboj navzkrižno povezano in večkrat definirano !!!....... |
Se popolnoma strinjam.
In še vedno niso popravili definicij za ploščice v boards.txt .
igo je napisal/a: |
..........Take knjižnice bi bile vitke (brez ifndef, ifdef, switch, ... include medsebojno navzkrižno sklicevanje, ... nesnage) in absolutno optimizirane (beri: Ni čudno, da bo Microchip kupil Atmel). V njih bi bili vsi ukazi, da bi lahko potem razni programerji po svetu s pomočjo tistih ukazov lahko izdelovali ostale namenske knjižnice za GLCD, serial595, serial485, Touch, EEPROM, 1-wire, ... |
Točno tako in vključiš kar potrebuješ.
Sicer pa, važno, da si rešil .
PS. Samocenzuro sem jaz popravil
_________________ Lp, Jaka |
|
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: 76 dni
Powered by phpBB © 2001, 2005 phpBB Group
|