Dallamcsengő Tiny45 chipre

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
oregharcos
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 21. hétfő, 6:00

Zene

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

Szia Robi!
Mint már láttad, ill. olvastad a másik fórumon, én AVR-be kis zenét programozok, programoztam bele. Nem kapom vissza azokat a hangokat
amit hallani szeretnék.
Már sokszor olvastam a 903.Zene leírásodat.
Nem igazán értem, próbáltam számolni, de nem jött ki normális szám.
Azt szeretném kérni, hogy írd le, miként számítsam ki egy ATtyni45- be, 8Mhz-es oszcillátorral, hogy pl. egy A-hang, 880Hz szóljon X-ideig!
Ha már egy kész számítás megvan, azt már át tudom írni. Remélem.

Segítségedet előre is köszönöm!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Lesd meg:
http://avr.tavir.hu/modules.php?name=Co ... age&pid=40

Sound utasitas:
SOUND pin, duration, pulses

Alapban kiadom az adott impulzusszámot és megmérem a frekvenciát.
Ezt pár helyen elvégezve, meg is van a konstans a 8 MHzre.


Az excel-ben a konstanst változtasd. :)
Avatar
oregharcos
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 21. hétfő, 6:00

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

Üdv mindenkinek!
Átírtam a sirleslie-től kapott kódot így:
Ledjelzés kiiktatva, helyére a nyomógom került.
PB3-on= Hangszoro
PB4-en=nyomogomb
Így a PB0,1,2-sek szabadon maradnak az STK500-as programozáshoz.
Eredmény: ha kiiktatom a ledjelzést, nem szól a hangszoró.
Ha így alakítom 'If Csengetes = 0 Then parancsot szól a hangszoró.
Természetesen így nincs nyomógomb kezelés.
Szeretném megoldani, hogy csak akkor induljon a dallam, amikor a gombot megnyomom.
Itt az eredeti kód:

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

 '*************************************************************************
'*    Dallamcsengő visszajelzéssel by MM - mcselec.com #AN155 alapján    *
'* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
'* Fordító    : BASCOM - V.2.0.7.4                                       *
'* Dátum      : 2012-05-12                                               *
'* Honlap     : www.sirleslie.atw.hu                                     *
'* Írta       : Balogh László                                            *
'* E-mail     : mestermuvek.atw@gmail.com                                *
'* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
'* Örök köszönet a sok-sok segítségért: Cseh Róbert http://avr.tavir.hu  *
'*************************************************************************

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

' ATtiny45 lábkiosztása a feladathoz

'                  __ __
'                  I  U  I
'  Reset PB5 I      I VCC
'           PB3 I      I PB2 Csengő gomb
'           PB4 I      I PB1 Hangszóró
'          GND I      I PB0 Visszajelző led
'                 I___ I

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Input
Config Portb.3 = Output
Config Portb.4 = Output
'Portb.5  RESET - nem piszkáljuk

Hangszoro Alias Portb.1
Csengoled Alias Portb.0

Portb.2 = 1

Config Int0 = Falling
On Int0 Gombnyomas
Enable Int0

Enable Interrupts

' változók
Dim Csengetes As Bit , Ledvill As Byte

Do

  If Csengetes = 1 Then                                     ' ha gombnyomás történt

    Set Csengoled                                           ' csengetés vizuális jelzése

    'Europe :: Final Countdown  - egy kicsit gyors, 8MHz-es órajelhez vannak generálva a sound utasítás paraméterei
    Sound Hangszoro , 124 , 675                             'H2(1/16)
    'itt van a többi hang kódja

    Reset Csengoled
    Reset Csengetes                                         ' csengetés jelzőbit törlése

  End If

  ' készenléti üzemmód jelzése
  Incr Ledvill

  If Ledvill = 100 Then Set Csengoled                       ' ...egy rövid villanással
  If Ledvill = 102 Then
    Reset Csengoled
    Ledvill = 0
  End If

  Waitms 20

Loop



Gombnyomas:                                                 ' gombnyomáskor
  Set Csengetes                                             ' csengetés jelzőbit aktiválása
Return
Átalakitott kód:

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

'*************************************************************************
'*    Dallamcsengő visszajelzéssel by MM - mcselec.com #AN155 alapján    *
'* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
'* Fordító    : BASCOM - V.2.0.7.4                                       *
'* Dátum      : 2012-05-12                                               *
'* Honlap     : www.sirleslie.atw.hu                                     *
'* Írta       : Balogh László                                            *
'* E-mail     : mestermuvek.atw@gmail.com                                *
'* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
'* Örök köszönet a sok-sok segítségért: Cseh Róbert http://avr.tavir.hu  *
'*************************************************************************

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

' ATtiny45 lábkiosztása a feladathoz

'                               __ __
'                               I  U  I
'                Reset PB5 I     I VCC
'       Hangdszoró  PB3 I     I PB2 régi   Csengő gomb
'                          PB4 I     I PB1 régi   Hangszóró
'                         GND I     I PB0 régi   Visszajelző led
'                                I_____I

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Input
'Portb.5  RESET - nem piszkáljuk

Hangszoro Alias Portb.3
'Csengoled Alias Portb.0

'Portb.2 = 1
Portb.4 = 1

Config Int0 = Falling
On Int0 Gombnyomas
Enable Int0

Enable Interrupts

' változók
Dim Csengetes As Bit                                        ', Ledvill As Byte

Do

   If Csengetes = 0 Then                                     ' ha gombnyomás történt

   ' Set Csengoled                                           ' csengetés vizuális jelzése

    'Europe :: Final Countdown  - egy kicsit gyors, 8MHz-es órajelhez vannak generálva a sound utasítás paraméterei
    Sound Hangszoro , 124 , 675                             'H2(1/16)
   'Itt vannak a többi hang kódjai

   ' Reset Csengoled
    Reset Csengetes                                         ' csengetés jelzőbit törlése

   'End If

  ' készenléti üzemmód jelzése
 ' Incr Ledvill

  'If Ledvill = 100 Then Set Csengoled                       ' ...egy rövid villanással
  'If Ledvill = 102 Then
  ' Reset Csengoled
  '  Ledvill = 0
  'End If

  Waitms 20

Loop

Gombnyomas:                                                 ' gombnyomáskor
 ' Set Csengetes                                             ' csengetés jelzőbit aktiválása
Return
A ledjelzésre nincs szükségem.
Azt szeretném kérdezni, hogy mit csinálok rosszul, miért nem működik
gombnyomásra?
Segítséget előre is nagyon köszönöm!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

oregharcos!
Talán előbb az alapokat kellene elsajátítani, nem rögtön a megszakítás és hangkeltést!

Először talán olvasd ezt el, elejétől végéig:
http://avr.tavir.hu/modules.php?name=Co ... ies&cid=15

:)
Avatar
muszer
Biztosítékgyilkos
Hozzászólások: 50
Csatlakozott: 2009. december 28. hétfő, 7:00

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

Az attiny45-nél a PB2-n van az INT0 megszakitás figyelése.
Ha a programod ez marad, akkor a gombnak a PB2-n kell lennie.

A megszakításban ki van kommentelve a csengetés beállítása....
Avatar
oregharcos
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 21. hétfő, 6:00

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

kapu48 írta:oregharcos!
Talán előbb az alapokat kellene elsajátítani, nem rögtön a megszakítás és hangkeltést!

Először talán olvasd ezt el, elejétől végéig:
http://avr.tavir.hu/modules.php?name=Co ... ies&cid=15

:)
Köszi az infót, sokat segített!
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Partszélről:

Prellegni fog, de nem kicsit!

Vagy írsz egy prell mentesítő részt vagy a debounce paranccsal megoldod.
Én a helyedben azt, használnám! Erre találták ki. Ráadásul, bármelyik lábra ráteheted.
A help-ben megtalálod a szintaktikát!
Avatar
oregharcos
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 21. hétfő, 6:00

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

kovacsna írta:Partszélről:

Prellegni fog, de nem kicsit!

Vagy írsz egy prell mentesítő részt vagy a debounce paranccsal megoldod.
Én a helyedben azt, használnám! Erre találták ki. Ráadásul, bármelyik lábra ráteheted.
A help-ben megtalálod a szintaktikát!
Szia!
Köszönöm az infót! A prell nem gond, mert optocsatolóval megy az input.
Egy RC időállandóval tudom javítani, esetleg schmitt trigger-el.
Azt tudom, hogy másik lábon is mehet az input, mert C-ben működik.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

A másik lábon csak akkor input, ha a sw-t is átírod hozzá:)

Legegyszerűbb prelltelenítő:
- felhúzó a láb és 5V közé 10k,
- láb és gnd közé 100nF


optoinput?
Igaz nem 50Hz jön rajta? :)
Avatar
tranzisztoros
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2012. április 7. szombat, 6:00

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

Robert írta:A másik lábon csak akkor input, ha a sw-t is átírod hozzá:)

Legegyszerűbb prelltelenítő:
- felhúzó a láb és 5V közé 10k,
- láb és gnd közé 100nF


optoinput?
Igaz nem 50Hz jön rajta? :)
Szia Robi!
Köszönöm az infókat! A prellezés most azért nem zavar, mivel ez egy próba.
Majd még átnézem a kódot, és a leírtakat.
Nagyon köszönöm segítségedet!
Minden jót!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ha a gomb meg lett nyomva, akkor játsza le a dallamot, az a cel?

SET csengetes megfelel a csengetes=1-nek.
If csengetes=0.... sor meg akkor jatszik, ha nincsen megnyomva.


Mi a cel pontosan?
Hogyan kellene, hogy mukodjon?
Avatar
oregharcos
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 21. hétfő, 6:00

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

Robert írta:Ha a gomb meg lett nyomva, akkor játsza le a dallamot, az a cel?

SET csengetes megfelel a csengetes=1-nek.
If csengetes=0.... sor meg akkor jatszik, ha nincsen megnyomva.


Mi a cel pontosan?
Hogyan kellene, hogy mukodjon?
Szia Robi!
Köszönöm, hogy foglalkozol a dologgal!
Az első kód amit beraktam, az jól működik, gombnyomásra szól a csengő.
A célom az, hogy a nyomógomb ne a PB2-ön legyen, hanem a PB4-en.
Tehát PB4-es lesz az Input.
Köszönettel!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Akkor a PCINT kezelést lesd meg. Nem olyan ördöngősség....

Kérdés: miért nem jó a PB2?
- kész a nyák
- csak :oops:


Hülye tipp: kössed össze a PB2 és PB4 lábat és így a PB2-re kerül :P

PB4-en nincs _önálló_ megszakítás...
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

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

do

DEBOUNCE Pinb.4 , low , gombnyomas  , SUB

.
.
.
.
loop

Gombnyomas:

set csengetes

return
Ennél hová kell egyszerűbb megoldás?
Avatar
oregharcos
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 21. hétfő, 6:00

Köszönöm!

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

Üdvözlök mindenkit!

Sikerült megoldani SirLeslie segítségével.

Mindenkinek köszönöm a segítséget!
Válasz küldése