Jelgenerátor AVR-el

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3319
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. június 29. péntek, 13:54

8MHz-vel felesleges próbálkozni!
Számoljál kicsit!
8/8=1Mhz Tehát van 8 órajeled a cselekvésre, ha pont a ciklus elejét kapnánk el!
Tegyükfel!
A 8MHz-n lefut 8 ciklus amiből az 1MHz Első fele 0000 a második 1111
Neked ez alatt a 4*H szint alatt kellene a vezélő lábaidat 1 > 0 > 1 Állapotba vinned!
Bascom Help ben megkeresed: Assembler mnemonics
A Táblázat utolsó oszlopában van az utasítások végrehajtásához szükséges idő!
Ha összeadod, őket megkapod, menyi idő alatt fut le a rutinod.

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

$asm
   Push r24

 Stopb1:
   IN r24,portb                                             '1
   Andi r24,&B00000010                                      '1
   BRNE Stopb1                                              '1 - 2 (1 ha nem ugrik, 2 ha ugrani kel
   'BREQ Stopb1
   ' Itt már biztosan a H szint elejét kapjuk el!
   CBI Pinb,3                                               '2
 Stopb2:
   IN r24,portb                                             '1
   Andi r24,&B00000010                                      '1
   BRNE Stopb2                                              '1 - 2 (1 ha nem ugrik, 2 ha ugrani kel

   CBI Pinb,2                                               '2
   Nop                                                      '1
   nop                                                      '1
   SBI Pinb,2                                               '2
   SBI Pinb,3                                               '2

   Pop r24
 $end Asm

A H szint vezérléséhez kel neked a fenti példához 14 órajel!
Neked pedig van rá 4!
És itt a led-es vagy akármilyen kísérlet félrevezető, mert ha látsz valamit az már régen rossz!
A 20MHz órajelbe esetleg beleférnél! AZ Útolsó már végletekig optimalizált rutinnal!

:P

Avatar
kala1982
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2011. január 4. kedd, 7:00

HozzászólásSzerző: kala1982 » 2012. június 29. péntek, 14:22

Értem, RW lábát lehetne a földre kötni, egy két kapcsolásnál lekötik. Lehetne így spórolni pár órajelet? Vagy így direkt nem egészséges?

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3319
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. június 29. péntek, 14:29

Kiszámoltam neked Órajelre pontosan 16MHz-re:

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

 Sub Write_sid(byval Cimb As Byte , Byval Adatb As Byte)
  'Előkészitjük az adatokat mert nagyon rövid az idő a SW szinkronizálásra
  ' Mivel ezt HW-vel szokták megoldani
    Sid_cim = Cimb

    Sid_adat = Adatb

  $asm


 Stopb2:
 ' Itt Bizonytalan mikor ugortunk ide
    Sbic Pinb,3         ;Várunk B.1 = 1 szintre
    Rjmp Stopb2
 'Ha 16MHz van 16 orajelünk  Ebböl az első 8 * 0-szint
  Stopb1:
 'Itt várjuk az elsö 0 szintet
     Sbis Pinb,3         ;Várunk B.1 = 0 szintre
     Rjmp Stopb1                      ;  L re megy továb
 ' 1       Utasítás/orajel
    Nop
 ' 2
    Nop
 ' 3
    Nop
 ' 4
    Nop
 ' 5
    Nop
 ' 6
    Nop
 ' 7
    Nop
 ' 8
     Nop
 ' 9
    Nop
 ' 10

    ' Itt már biztosan a H szint elejét kapjuk el!
    CBI Pinb,3                       ;WR = 0 Az CBI az 2 orajel
 ' 12
    CBI Pinb,2                       ;CE = 0
 ' 14
    Nop
 ' 15
    Nop                                                       'Nem tudom 1 - 3 Nop várakozás kel amig SID elveszi az adatot
 ' 16
      Nop
 ' 17
    Nop
 ' 18

    SBI Pinb,2      ;CE = 1                                   ' Az SBI az 2 orajel
 ' 20
    SBI Pinb,3      ;WR = 1
 ' 22   Ez pont 18 órajel

  $end Asm
  End Sub


Ha kiveszed az RW-t nyersz 2 órajelet, ami helyet tehetsz NOP ókat.
Itt van némi lehetőséged a NOP ok al játszani!

8)
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2012. június 30. szombat, 19:43-kor.

Avatar
kala1982
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2011. január 4. kedd, 7:00

HozzászólásSzerző: kala1982 » 2012. június 29. péntek, 14:53

Nagyon szépen köszönöm a segítségedet, kipróbálom ezt a verziót is, próbálom majd minél hamarabb visszajelezni az eredményt.

Köszi még egyszer!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3319
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. június 30. szombat, 19:44

Most megnéztem újból a SID WRITE CYCLE diagramot!

Kiderült, hogy a CS-, RW- nek csak Q2 Lefutó éle után kel 1-be mennie.
Így már azért jóval könnyebb!

Módosítottam a programot! (Már sokadszor!)

:wink:

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 10:36

Sziasztok!

Segítsetek, mert ebbe a projektbe már csomószor beletört a bicskám, de nem hagy nyugodni ezért mindig előveszem:

ilyet szeretnék építeni: http://www.x-simulator.de/wiki/Tacho_Controller_by_Elektronikjack

Adott egy autó műszerfalból kiszerelt analóg fordulatszámmérő műszer (angolban tacho-nak nevezik) három bemenete van: egy közös (GND??) a másik kettő közül az egyik a közöshöz képest kb 280 Ohm a másik pedig kb 1500 MOhm

A műszerről elvileg annyit tudni, hogy 10-300Hz ig kap jelet és ettől függően tér ki a mutatója. (általában a 90-es évek analóg autó műszerei mind így működnek)
http://www.x-simulator.de/wiki/images/Nissan-wiring.JPG
Kép

írtam programot bascomban:

A 300 Hz az 1/300 ütem, vagyis 1 sec alatt 300 szor vált állapotot a kimenő jelem: timert beállítom hogy 3,333 ms-onként billentse át a lábat.
de semmi eredmény, a műszer kitér kb 2/3 ig és ahogy a frekvenciát változtatom gombokkal, nem a kitérés változik, hanem a mutató egyre nagyobb kilengéssel billegni kezd.
Toggle miatt esetleg felezni kell a frekit ezért kipróbáltam 1,666 msec es ütemmel is de úgy sem működik.

Próbáltam PWM jellel meghajtani itt is felmegy 2/3-ig és ott áll akármilyen kitöltést/prescalert adok meg neki.

Aztán megpróbáltam, hogy hátha 12v jelet kér egy BC547-et vezéreltem az Atmegával de így is csak a fenti eredményt kaptam (2/3-os kitérés és vibrál a mutató)

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. november 5. hétfő, 10:46

Nem fordult el a mutató a tengelyen?
Határolók a megfelelő helyen fogják meg?
JAni

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 10:50

winnerbt írta:Nem fordult el a mutató a tengelyen?
Határolók a megfelelő helyen fogják meg?
JAni


Minden a helyén van, a mutatót le sem tudom szedni úgy rá van gyógyítva, (le akartam fotózni ide a tekercseket meg a bemeneteket) ha kézzel feltekerem max. fordulatra majd elengedem, szépen csillapítva leereszkedik 0-ra, nem csapódik az ütközőhöz sem.

Arra gondolok nem-e színusz jele kell neki, de ettől még kellene valamennyire működnie négyszöggel is nem?

Van egy egyszerű kapcsolás a fent linkelt oldalon amivel meg lehet hajtani hangkártyán kimenő szinusz jellel, ma megépítem és letesztelem vele.

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 11:17

Esetleg így kellene bekötni?
Kép

Pin 1: 5V AC Lighting
Pin 2: 5V AC Lighting
Pin 3: RPM Level in +
Pin 4: RPM Level in -
Pin 5: Chassis Ground

Mi az "RPM level -" GND?

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3319
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. november 5. hétfő, 11:20

Itt ULN2803 van illesztve a Tacho.
http://www.x-simulator.de/wiki/images/C ... 300dpi.JPG

Viszont amit nem értek mért van 4-4 kimenet egymással szemben a csatlakozón?
Esetleg ellenütemben vezérel 2 +,- bemenetet?

Van valahol bővebb infó ezekről a műszerekről?

Mondjuk, az indukciós terhelés jobban kedveli a szinuszos meghajtást!
Ezért kel pl. a feszültség átalakító inverterekből is a méregdrága sinusost venni, ha motorok is vannak a hálózatban.

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 11:36

Hát a google-t rongyosra hajtottam ezekkel a kérdésekkel.
Valószínűleg az a bekötési alapelv amit eggyel feljebb linkeltem kis képet.
Az x-sim-es srác egy dróton vezérli a fordulatszámot:
ULN kapcsolgat GND-t neki a jelvezetéken, ami 4.7Kval fel van húzva 12V-re.
A 4 ből az egyik tekercs szerintem simán csak 12V-t kap.
Ráadásul a műszeren a gyakorlatban csak 3 kivezetés van:
tehát akkor 12V, GND és szignál. Eddig csak a szignált és a GND-t adtam meg neki elsiklottam a 4 tekercses rajzon...

Ma délután nekiugrok és kipróbálom ezt a 4.7K-s felállást.
Szerintem ha (AVR nélkül) a jelvezetéket odanyomkodom gyorsan a GND-hez akkor is ki kell lengenie (persze összevissza) a mutatónak nem? (10Hz=10 ütem/sec)

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 11:59

Még valamit találtam, a rajzon air-core a műszer jelölése vagyis légmagos:
"Elektrodinamikus műszer
Amennyiben a Deprez-műszerben előállított mágnes teret nem állandó mágnessel, hanem tekerccsel állítjuk elő, akkor elektrodinamikus műszerről beszélünk. Az állórész által létrehozott mágnes térben fordul el a mozgórész. Az elektrodinamikus műszer lehet vasmagos (ferrodinamikus), ill. vasmentes (légmagos). A légmagos műszer esetében a mérőmű nem tartalmaz vasmagot, azaz az állórész tekercsek légmagosak.

Elektrodinamikus ampermérő: az állórésztekercselés két részből áll, melyet a lengőrész tekercsével sorba kapcsolunk. A két tekercsen átfolyó áram megegyezik, a kitérés a mérendő áram effektív értékének a négyzetével lesz arányos, minek következtében a műszerskála
négyzetes lesz.
Elektrodinamikus voltmérő: az elektrodinamikus ampermérőhöz képest annyi a különbség, hogy a lengőrész tekercsét előtét ellenállással látjuk el."

Na ebből kell kihozni valamit, ki kellene számolni hogy a háromból melyik melyik láb. A közös lesz a GND, szerintem a 12V a nagy ellenállású, a bemenő freki jel pedig a kis ellenállású. És ez kezd passzolni az x-sim-es projekt kapcsrajzával nagyjából.. :D

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 12:54

kapu48 írta:Esetleg ellenütemben vezérel 2 +,- bemenetet?

Van valahol bővebb infó ezekről a műszerekről?


Még valamit találtam a műszerről és a működési elvéről:
http://www.fieros.de/en/articles/speedo.html

kb így néz ki az én műszerem magja is csak a tekercsen nem zöld hanem sárga a lakk.

Google fordítóval nagyjából:
A Speedo tű hajtja egy úgynevezett air-core méter. Rendszeres méterre munkát egy tű, amely vissza van húzva a nullára egy rugó és egy tekercs kényszeríti egy mágnes távol a nulla pozícióba, ha áram folyik át a tekercs. Légmagos mérő a két tekercs, amelyek egy 90 fokos szögben egymáshoz. Ezek a tekercsek nevezik szinusz és koszinusz tekercs tekercs. Mindegyik tekercs termel egy mágneses mező arányos áram folyik át rajta. Mivel a két tekercs vannak 90 fokos szögben, a két terület kitesz egy "mágneses vektor". Ha a mágnest közepén helyezkedik el az ezen a területen, akkor irányába mutasson ennek mágneses vektor. Változtatásával a jelenlegi keresztül két tekercs, a tűt használni minden 360 fokos a szelvény.

itt egy ilyen műszer meghajtó IC adatlapja, ebbenis van angol leírás a működési elvről:
http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS005263.PDF


A két tekercs 90 fokra van egymástól és a kettőn átfolyó áram átlaga ad egy mágneses vektort amire beáll a tű.
Ennek fényében akkor hogy is kell bekötni, a szinusz jelet? egyikre a frekvencia felfele a másikra meg a lefele szálló ágát?
Vagy az x-simes bekötés szerint: 12V állandó az egyik tekercsre a másikra pedig fordulatszámarányosan 10-300 Hz ig küldeni az impulzusokat?
A kettő nem nagyon passzol egymással.
Most már lassan nem értek semmit :( (mondjuk eddig se sokat, de nehogymá ne jöjjünk rá)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3319
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. november 5. hétfő, 13:24

Raktál ide olvasgatni valót!

Addig Itt az oldal alján 1 Analóg vezérelt teszt program:
http://www.mikrocontroller.net/topic/232533
Talán próbáld ki.

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2012. november 5. hétfő, 13:36

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

$regfile = "m8def.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 16
$framesize = 40

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 ,
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2

Dim A As Byte
Config Lcd = 16 * 2
Config Portd = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Dim Analogwert As Word , Pwm1 As Byte

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B
Pwm = Clear Down , Prescale = 1
Start Timer1

Dim Ver1 As Byte
Dim Zaehler1 As Byte

Pwm1b = 0

Do
Analogwert = Getadc(0)
Analogwert = Analogwert / 204
Pwm1 = Analogwert * 51
Pwm1b = Pwm1
Loop

Dim Zaehlen As Word
Pulsein Zaehlen , Pinb , 0 , 0
Print Zaehlen

End


Ki fogom próbálni, bár hasonlót már írtam én is tegnap éjjel (mikor is érnék rá ha nem akkor ...), azért állhatott be fix 2/3-ra a mutató mert csak egy tekercset hajtottam meg.
Nagyon úgy néz ki az air-core driver IC-k adatlapjából, hogy két külön PWM csatornával kell vezérelni egy műszert.
Egyik (pwm1a) a szinusz a másik (pwm1b) a koszinusz tekercset hajtja és a kettő áramának arányában fordul el a mutató.


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég