Öntanuló AVR

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Jimmi12
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2008. december 10. szerda, 7:00

Öntanuló AVR

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

Sziasztok,
Viszonylag új vagyok itt a fórumon, eddig igazából inkább csak olvasgattam. AVR programozással is nemrégen kezdtem el foglalkozni. Amiért nyitottam ezt az új témát az a következő lenne:
adott egy Atmega1284-es kontroller és szeretnék hozzá egy olyan programot csinálni ami a következőképpen működik, van 10db kapcsoló, amiknek az állapotát kellene figyelni, majd ennek megfelelően 10db relét ugyanilyen sorrendben és időzítéssel kapcsolgatni. Elvileg egy 'öntanuló' program lenne célom, ami képes lenne a 10db kapcsoló időbeli változásait regisztrálni és ugyanezt vissza adni a kimeneteken. Eddig jobbára Bascom-ban dolgozgattam, a relévezérlés és a bemenet olvasás nem jelent gondot, de a továbbiakra nézve nincs ötletem, hogy merre induljak.
Előre is köszönöm a segítséget!

Üdv.: Imi
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Ha 24h esemény kezelésre gondolsz?
Akkor szerintem kezdjed itt tanulást:
SD-Logger II. - Mi is az a Valós Idejű Óra (RTC - Real Time Clock)?
http://www.tavir.hu/sdlogger-2

Ha már az aktuális időpontokat eltudod tárolni, a feldolgozása utána következik.
Avatar
Jimmi12
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2008. december 10. szerda, 7:00

Re: Öntanuló AVR

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

Helo,

Nem 24h-s rögzítésre gondoltam, hanem a következőre az egyszerűség kedvéért két darab kapcsolóval:
- a program futása szempontjából kell egy külön kapcsoló tanuló/normál üzemmód
- a kapcsoló "tanuló" állásában kellene figyelni a két darab kapcsolót (pl.: 1-est bekapcsolom, 2sec után lekapcsolom, 2-est bekapcsolom, 3sec után lekapcsolom)
- ezt a működést az AVR-nek el kellene tárolni és ha a kapcsolót visszaállítom "normál" módba akkor a kimeneteken levő reléket ugyanebben a sorrendben és időkkel aktiválja.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Minden féleképen kel valami időmérő eszköz?
A legegyszerűbb az előbbi RTC lenne.

A másik lehetőség Timer számlálót belőni 1 sec megszakításra, és számlálni a megszakításokat.
Tanuló üzemben figyeled, és valahol eltárolod a kapcsolók állapot változásának idejét.
Aztán vissza játszod.
Avatar
Jimmi12
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2008. december 10. szerda, 7:00

Re: Öntanuló AVR

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

Valami időmérés mindenképpen kell, tudnom kellene, hogy melyik kapcsoló mennyi ideig volt aktiválva. A Timer jó ötletnek tűnik, a "tanuló/normál" kapcsolóval lehetne indítani és figyelni a megszakításokat. Sajnos még egyik-el sem dolgoztam, sem a Timer-el, sem a megszakítással.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Öntanuló AVR

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

Egyszerűsítenék:
- gombok/kapcsolók beállítva
- rögzítés gomb, leállítás gomb.


Belül az első rögzítés gombnyomás indítja a rögzítést.
millis() startértéke elment

gombok beállítanak
rögzít megnyom
gombok állása, millis(most)-millis(start) elment EEPROM-ba

leállít gomb megnyom
gombok állása, millis(most)-millis(start) elment EEPROM-ba


És a visszajátszást ez alapján is meg lehet oldani :)
Avatar
Jimmi12
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2008. december 10. szerda, 7:00

Re: Öntanuló AVR

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

Helo Róbert,

Sajnos nem hiszem, hogy ez a megoldás járható lenne, mert a "tanulási" idő alatt az egyes lábak szintjei időben változhatnak. Valószínűleg én nem tudom pontosan megfogalmazni, de csatoltam egy diagramot ami talán érthetőbb (3 db kapcsolóval). Ezt a működést kellene letárolni majd a kimeneten visszaadni. Ha jól sejtem a megszakítások felé kellene vennem az irányt, mert az Atmega1284 rendelkezik lábankénti megszakítással.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Ha még nem ismered? Keresd fel a régi fórum: http://avr.tavir.hu/
Bascom leírás illetve könyv!: http://avr.tavir.hu/modules.php?name=Co ... ies&cid=15
16. Megszakítások
32. Timer
Oldalakat!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

1 elképzelés megvalósításához jóval többet kel tudni, mint amit te itt elárultál nekünk!

A pontos időzítéshez feltétlenül szükséges 1 külső kvarc beépítése!
Elsőre ennek az értékét kellene megválasztani!

Szempontok: Gyors legyen a rendszer vagy inkább kis fogyasztású?

Ha már az időzítésen van a hangsúly, az értéke olyan legyen, hogy 2 hatványával vissza osztható legyen pontos 1sec.
Lesz soros kommunikáció? Mert akkor ez is meghatározó szempont!
….
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Ki indulás 1 lehetséges megvalósításra.

Timer1 1Hz-es megszakításra belőve.
+ Pár lehetséges változó definiálása.

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

' Atmega1284_01.bas



$regfile = "m1284def.dat"                                                ' specify the used AVR
$crystal = 8000000                                                ' used crystal frequency
$hwstack = 32                                                        ' default use 32 for the hardware stack
$swstack = 10                                              ' default use 10 for the SW stack
$framesize = 40                                            ' default use 40 for the frame space

'$baud = 19200                                              ' use baud rate 19200 baud


Const Maxv = 8  ' Feltételeztem kapcsolónként Max 8 váltást!?
' Tömbök Kn kapcsolásók Scounter idő értékeinek
Dim K1secW(Maxv) As Word
Dim K2secW(Maxv) As Word
Dim K3secW(Maxv) As Word
' Tömbök Kn kapcsolók aktuális szintjei 0/1
Dim K1level(Maxv) As Byte
Dim K2level(Maxv) As Byte
Dim K3level(Maxv) As Byte
' Kn átmeneti állapot számlálók kapcsolónként jelzik hol tartunk
dim K1index as Byte
dim K2index as Byte
dim K3index as Byte
' Kn állapot változás detektálása. régi érték(1), új érték(2)
Dim K1levelt(2) As Byte
Dim K2levelt(2) As Byte
Dim K3levelt(2) As Byte

' ATmega Timer/Counter/Prescaler Calculator
' https://et06.dunweber.com/atmega_timers/
Const Timer1pre = 31250       '1Hz kezdő érték


'The TIMER1 is a versatile 16 bit TIMER.

'This example shows how to configure the TIMER



'First like TIMER0 , it can be set to act as a TIMER or COUNTER

'Lets configure it as a TIMER that means that it will count and that

'the input is provided by the internal clock.

'The internal clock can be divided by 1,8,64,256 or 1024

Config Timer1 = Timer , Prescale = 256
On Timer1 Sec_counter
Dim Scounter as Word    ' vagy inkább DWord?
Scounter = 0

Stop Timer1
TIMER1 = Timer1pre      '1sec kezdő érték ?
Enable Interrupts
Enable Timer1

Start TIMER1


Do
' Folytasd


Loop



Sec_counter:
   Stop Timer1
   TIMER1 = Timer1pre       '1Hz kezdő érték ?
   Start Timer1
   decr Scounter       ' másodpec számláló

Return

End
Véleményed?
Milyen irányban folytatnád?
Melyik port-on lesznek a kapcsolók?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Előzőleg ajánlott „ATmega Timer/Counter/Prescaler Calculator”-hoz javítom a számítást:

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

Const Timer1pre = 65536 - 31250       '1Hz kezdő érték
Inkább ezt használd:
Download AVR calculator:
http://www.electronics-lab.com/downloads/mcu/002/

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

Const Timer1pre = &h85ee       '1Hz kezdő érték        34286
Avatar
Jimmi12
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2008. december 10. szerda, 7:00

Re: Öntanuló AVR

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

Helo kapu48,

Csatoltam egy kapcsolási rajzot, a Max232 a soros kommunikációhoz még nincs rajta. A J1-J10-es csatlakozókra lenne a kapcsoló, ami 12V-ot ad a bemenetre, ezért tettem be a zenert (5V6) és az opto-s leválasztást. Amikor aktiválódik a kapcsoló a proci adott lába gnd-re kerül. A bemenetek a PA0-PA7 és a PB0, PB1. A kimenetekre egyenlőre led-ek vannak kötve, ezt majd kiváltom relével és a PC0-PC7 ill. PD6, PD7 port-on lesznek. Az órajelet szeretném 16Mhz-re választani. A PB3-ra kötött S1-es kapcsoló állása döntené el, hogy tanuló üzemmódban (PB3=1) van-e vagy normálban (PB3=0). Az S2-es nyomógomb indítaná a kimeneteket, ha "normál" üzemmódban van.

"Const Maxv = 8 ' Feltételeztem kapcsolónként Max 8 váltást" ez bőven elegendő. A kódrészlet alapján amit leírtál tömbökben tárolódna a lábak aktuális értéke és a hozzátartozó idő. Igazából a megszakítás részét nemigazán értem. Ahogy én gondolom, de javíts ki ha tévedek, az S1-es kapcsoló bekapcsolásakor (PB3=1) elindul a Timer1, alapesetben az öszes bemenet 1-es szinten van, ha pl. a PA0 lábon érkezik egy lefutóél az generál egy megszakítást és a Timer1 indítása óta eltelt idő ill. a bemenet állapota eltárolódik az erre a célra létrehozott tömb-ben. Viszont innetől nemtudom mi történik, ezen a lábon a következő változás felfutó él lesz aminek szintén generálnia kellene egy megszakítást és ismét tárolni kellene a az időt és az értéket.....
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Helo Jimmi12!

Kapcsolási rajz kiegészítése!
AVCC-t is kösd össze a VCC-vel, különben az PortA nem kap tápfeszt!
A 100n kerámia szűrő kondikat elfelejteted!
Legyen a táp VCC – GND lábak közelében 100nF + 4.7uF tantál elkó.
És minden kapcsoló és nyomógomb (kimenet – GND)-re kötve a Prellezés csökkentésére!

Az S1 kapcsoló 1-es lábról R31-et kösd át az S1 2-es lábára, hogy a kapcsoló átváltása közben is fix H szint legyen a bemeneten (nem szabad lebegnie!)
Ugyan ez igaz minden kapcsolóra és nyomógombra!
És ne spórolj a 100n-kal!

Jól jött ez a rajz! Legalább már van elképzelésem mit is akarsz csinálni!


A Bascomom 2.0.7.7 Helpjében nem találtam a PCINTn kezeléséről útmutatást!
Ezért ezt majd az adatlapból kel regiszter szinten megoldani.
ATmega1284P Datasheet: http://www.atmel.com/images/doc8059.pdf
Leírás 67. oldal környékétől: Pin Change Interrupt.

(Majd próbálok mindenűt kommentezni! Amit nem értesz, azt kérdezd meg!)
FONTOS! A programom csak elméleti kivitelezés. Semmi garanciát nem vállalok rá!
Tesztelni, hibákat javítani neked kel! Ha elakadsz, jelentkezz és meg oldjuk!

A programot módosítom a leírásaid alapján!
És lépésenként felrakom ide, hogy egyeztetni tudjak veled!

Jó munkát!
:)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Öntanuló AVR

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

PCINT a Bascom samples alatt ott van.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Öntanuló AVR

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

Ez a kapcs. rajz már rézbe véset?
Lehetne módosítani?

Az S2 gombot is valamely INT0 (PD2) vagy INT1 (PD3) képes bemenetre kellene kötni!?
A könnyebb programozás céljából.
Az RS232-nek maradnak az PD0, PD1. Majd jól jön a hiba keresésnél!

Kellene 1 LED az 1Hz detektálására, PD.5-re gondoltam!?
Válasz küldése