AVR kezdőnek

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

SQR -> (négyzet)gyök
POWER -> hatvány



"Max azt tudom elképzelni, hogy lekérdezem a pillanatnyi állapotot és abban csak a nekem szükséges láb értékét módosítom és írom vissza. De ha lenne egyszerűbb hivatkozás egyetlen lábra...."

Így megy Bascomban is:
1, láb állapot beolvasása
2, adott bit megváltoztatása
3, érték kiírása

Csak a Bascom ezt a folyamatot eldugja előled.
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

-

Hozzászólás Szerző: szepnorbee »

Sziasztok! Hogyan lehet azt megoldani, hogy egy folyamat addig tartson, míg egy gombot nyomok? (Folyamatosan tartom) Aztán egy másik folyamat kezdődjön ha elengedem. (PWM szabályozás a célom) Autó belsőtér világítás halványitása. (jó gyakszi)

(közben keresgéltem)

Itt tartok:

Kód: Egész kijelölése

$regfile = "attiny45.dat"
$crystal = 8000000

Dim Feny As Byte
Dim A As Bit
A = 1

Config Portb.1 = Output                                     'pwm

On Int0 Valaszt
Config Int0 = Falling
Config Debounce = 50

Enable Interrupts
Enable Int0

Config Timer0 = Pwm , Prescale = 64 , Compare B Pwm = Clear Up
Enable Timer0

Pwm0b = Feny

Main:

Do
' ciklus
Select Case A
  Case 1 : Goto M1
  Case 2 : Goto M2
  Case Else Goto Main

End Select

Loop

Valaszt:
Toggle A

Return

M1:
Disable Int0
Config Int0 = Falling
For Feny = 0 To 255 Step 3
Waitms 20
Pwm0b = Feny
Next Feny

Goto Main

M2:
Disable Int0
Config Int0 = Rising
For Feny = 255 To 1 Step -3
Waitms 20
Pwm0b = Feny
Next Feny

Goto Main

End
Valami nem stimmel mert az M2-ben marad ha kap egy megszakítást.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Enable INT hiányzik a prg-ból!
Nem is kezeled le az INT-et! on intx ... hol van?
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

-

Hozzászólás Szerző: szepnorbee »

De szerintem lekezeltem:

Kód: Egész kijelölése

On Int0 Valaszt 
Config Int0 = Falling 
Config Debounce = 50 

Enable Interrupts 
Enable Int0
Ez nem az?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ok, elkerülte a figyelmem....


Az enable INT0 hiányzik a disable int0 után!
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

-

Hozzászólás Szerző: szepnorbee »

Uh ez jogos! Köszi. Öreg hiba. Holnap kipróba.

És észrevettem még valamit. A Case változójának bit értéket használok, ami ugye 0 vagy 1. Viszont Case 1 és Case 2 eseteim vannak. Eszerint a Case kettő nem is teljesülhet? Case 0-at elfogad a bascom?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Case bármi lehet. Tényleg, az se jó :P Odáig már nem is gondoltam bele .....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Szerintem ebben az alkalmazásban teljesen felesleges az INT használata!
Ha már letiltod a rutinokban az INT-eket (255/3)*20=1700ms-re! Vagyis nem kel a gyors reagálás, sőt még gondot is okoz!
Célszerűbb lenne csak Rutin végén, vagy Do-Loop elején vizsgálni a gomb állapotát és összehasonlítani az előzővel.
Történt e változás? A szerint folytatni az elágazást.
8)
Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00

Hozzászólás Szerző: ampervadasz »

De ha már itt tartunk annyit kérdeznék, hogyan tudom a portbővítő lábait is egyenként ki-be kapcsolni, hasonlóan mint a kontroller lábait? erre még nem találtam példát. Max azt tudom elképzelni, hogy lekérdezem a pillanatnyi állapotot és abban csak a nekem szükséges láb értékét módosítom és írom vissza. De ha lenne egyszerűbb hivatkozás egyetlen lábra....
Így már próbáltad:
I2cstart
I2cwbyte Pcf8574write
I2cwbyte Portertek '*** Érték átadása portbővítőnek
I2cstop
Itt a portérték 0-255 között van.

Próbáld így!
Portertek.X=Y

I2cstart
I2cwbyte Pcf8574write
I2cwbyte Portertek
I2cstop
X=0-7
Y=0,1

Én így szoktam...
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

Hozzászólás Szerző: szepnorbee »

Üdv re. Egy olyan kérdésem lenne hogy: Attiny45-öt programozok. Ennek ugye 1 db Timer-je van. Én ezt a Timert-t használom PWM-re a programomban. Viszont nekem jó lenne ez a timer mert PWM közben időt is szeretnék mérni. Megszakítást akarok generálni bizonyos idő elteltével. Kérdésem: Lehetséges ez? Egy programban Configolhatom a Timer-t PWM-ként és TIMER-ként is? Köszi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Nem. Vagy/vagy.


Amúgy Timer0: 8bites, Timer1: 8bites (ha nem néztem el az adatlapot....)
Szerintem 2 timer van :) .
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

Hozzászólás Szerző: szepnorbee »

Ahm akkor lehet kettő van. Csak nincs 16 bites. 5 percet szeretnék mérni, erre még a 16 bites sem elég (persze), azon elgondolkodom hogy legyen. De akkor a Timer 0 ill. 1 teljesen függetlenek egymástól? Zsír:)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Függetlenek.

Ha a chip jár 4 MHzről, akkor Prescale=1024. És van OverFlow. Ezt számolod.... Mondjuk az OverFlow legyen 500 msec. Így ha az OverFlow rutinban eléred a 10-es értéket, az pont 5 másodperc :P .
Avatar
jsityu
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2010. december 4. szombat, 7:00

Hozzászólás Szerző: jsityu »

Robert írta:SQR -> (négyzet)gyök
POWER -> hatvány

"Max azt tudom elképzelni, hogy lekérdezem a pillanatnyi állapotot és abban csak a nekem szükséges láb értékét módosítom és írom vissza. De ha lenne egyszerűbb hivatkozás egyetlen lábra...."

Így megy Bascomban is:
1, láb állapot beolvasása
2, adott bit megváltoztatása
3, érték kiírása

Csak a Bascom ezt a folyamatot eldugja előled.
Amikor ezt a választ kaptam azt hiszem már tovább léptem és mással kezdtem el foglalkozni, ismerkedni és nem is elemeztem ki pontosan.
Tehát a válaszod a múltkori kérdésemre az, hogy a portbővítő lábait véletlenszerűen, egyenként ki és bekapcsolgatni csak úgy nem lehet igaz?
Tehát pl. egy:
Set Ppport.6
I2cwbyte Ppport.6
utasításpárral sosem fogom azt elérni, hogy az adott bővítő többi lába maradjon az előtte való állapotban és csak a 6. lábat kapcsoljam be? Ehhez mindenképp előtte ki kell olvasni az állapotot, és az adott számú lábnak megfelelő bit átváltása és így visszaküldés a bővítőnek? Csak ez lehetséges? Nem tűnik túl rugalmasnak a dolog :( A kontroller lábait szépen lehet egyenként kapcsolgatni. Ez lenne jó a bővítőnél is.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Stimmel. A kimeneti port állapotát ha változóban tárolod, nem egyszerűbb?

A=&B001000
I2Cstart
I2cWrite cím
I2cwrite A
i2cstop

A=a or &B00000010
I2Cstart
I2cWrite cím
I2cwrite A
i2cstop


Ötlet:
1, &bxxxxxxxx OR &B00001000 'ahol 1 van az bekapcsol, a többi változatlan marad

1, &bxxxxxxxx AND &B11110111 'ahol 0 van az kikapcsol, a többi változatlan marad


Nos, ez nem jó?
Vagy mondjuk kirakod egy sub-ba és ott eldugod a kiírást....




A HW és a SW NEM kívánságaid szerint készül:)
Most az a 10 byte ennyit számít?

[cinizmus on]
Vagy tegyél be 100lábú IC-t. azon 84 láb szabadon I/O lehet:)
[cinizmus off]
Válasz küldése