Ablaktörlő időzítő szoftvere

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

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

Esetleg az igények szerint újraírni a programot?
:twisted:
Avatar
Mumtaz
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2007. február 18. vasárnap, 7:00

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

jwaldha írta:A megszakítás rutinban két return szerepel. Az álmoskönyv (Bascom Help) szerint ez nem sok jót jelent.
Bascom help:
ON interrupt label [NOSAVE]
.
.
.
You must return from the interrupt routine with the RETURN statement.



The first RETURN statement that is encountered that is outside a condition will generate a RETI instruction. You may have only one such RETURN statement in your interrupt routine because the compiler restores the registers and generates a RETI instruction when it encounters a RETURN statement in the ISR. All other RETURN statements are converted to a RET instruction.
A kér return közül az egyik egy if-ben van. Ez nem reti, hanem ret utasítást generál.
Szimulátorban futtatva az if-ben levő return újraindítja a procit.


A programban:

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

'-------------------------------------------------------------------------------
Timer_int:                                              ' Timer0 interrupt routine
            Timer0 = Timervalue                             'reload Timer0
            If Int_timer1 = 0 Then Return                   ' if timer is not set do nothing
            Int_timer1 = Int_timer1 - 1                     ' else decrement it over each interrupt
         Return
'-------------------------------------------------------------------------------
Talán segít, ha csak egy return kerül a megszakítás rutinba:

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

'-------------------------------------------------------------------------------
Timer_int:                                                  ' Timer0 interrupt routine
            Timer0 = Timervalue                             'reload Timer0
            If Int_timer1 <> 0 Then                         ' if timer is not set do nothing
              Int_timer1 = Int_timer1 - 1                   ' else decrement it over each interrupt
            endif
         Return
'-------------------------------------------------------------------------------
Sajnos semmi. :roll: :cry:
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

Áh szerintem egy ilyen eszköznél mint az avr a timer-t szó szerint
másra nem szabad használni.
Én javaslom neked ezt a programszerkezetet:
Az timerben csak mindenféle változót incrementálsz(vagy dec.) mást nem csinálsz.
Főprogram nézegeti a számlálóid mikor érnek el kivánt értéket.
Elérte? ha igen subrutin meghív.
szubrutinban :számlálók beállítása relé piszkálása kijelzés.etc. etc.
esetlegesen többféle szubrutin alkalmazása..


a kapcsolóval ugyanez a helyzet csak ott a int0-val kel változókat
piszkálni bár azt sem szabad elfelejtani hogy egy változó
betöltése is idő :D
Avatar
Mumtaz
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2007. február 18. vasárnap, 7:00

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

herc1234 írta:Áh szerintem egy ilyen eszköznél mint az avr a timer-t szó szerint
másra nem szabad használni.
Én javaslom neked ezt a programszerkezetet:
Az timerben csak mindenféle változót incrementálsz(vagy dec.) mást nem csinálsz.
Főprogram nézegeti a számlálóid mikor érnek el kivánt értéket.
Elérte? ha igen subrutin meghív.
szubrutinban :számlálók beállítása relé piszkálása kijelzés.etc. etc.
esetlegesen többféle szubrutin alkalmazása..


a kapcsolóval ugyanez a helyzet csak ott a int0-val kel változókat
piszkálni bár azt sem szabad elfelejtani hogy egy változó
betöltése is idő :D
Akkor ez lehet, hogy nem lesz meg, mert nem értek a programozáshoz. :(

Félve, de reménykedve kérdezem meg, hogy nem tudna valaki az itt fórumozók közül egy új programot írni ehhez a készséghez?
Én sajnos nem tudom megcsinálni.
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

Miért amit mutattál programot azt ki irta?
Ha te irtad akkor amit te irtál sokkal bonyolultabb mint amit én
blokk-szinten vázoltam neked.
Kb 30 sorból meg lehet oldani..
Avatar
Mumtaz
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2007. február 18. vasárnap, 7:00

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

herc1234 írta:Miért amit mutattál programot azt ki irta?
Ha te irtad akkor amit te irtál sokkal bonyolultabb mint amit én
blokk-szinten vázoltam neked.
Kb 30 sorból meg lehet oldani..
Nem én írtam. Sokat kutakodtam a netem és mindenképpen AVR-es cucc után, mivel ahhoz már (persze netes leírás alapján) raktam össze programozót. Tudok forrasztani, de az elektronikához olyan szinten nem értek, hogy saját tervezésű áramkört rakjak össze. Általában mindig neten közzétett cuccokat állítok össze és (AVR esetén) a hozzá mellékelt programot tolom fel.

Az előző oldalon leírtam, hogy mi is ez az áramkör és itt a linkje:
http://www.mcselec.com/index.php?option ... &Itemid=57
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

És megtanulni? Az smafu? :P

A Bascom könyv ezért van.....
Avatar
Mumtaz
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2007. február 18. vasárnap, 7:00

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

Bunkósságom határtalan, ezért elnézést kérek és így utólag is szeretném megköszönni SirLeslienek a fáradhatatlan segítséget, amit megoldásban nyújtott.

Köszönöm
Avatar
willmenn
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2012. július 14. szombat, 6:00

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

Igaz régi téma volt, de hátha valakinek segít!

Sikerült meg csinálnom ezt a projektet. Talán kicsit szerényebben, és nem kihasználva annyira a uC adottságait, de korrektül működik. A időzítést nem találtam annyira fontosnak, hogy pontos sec alapú legyen. Nekem +12-őt kap az egység, és azt is ad ki.

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


'********************************************************
'**                                                    **
'**  Dacia Logan gépjármű ablaktörlő ütem vezérlő'     **
'**                                                    **
'**             Készitette: Horváth József             **
'**              allias: willmen                                      **
'**                  Bascom 2073 verzió                **
'**                                                    **
'**                          2012                      **
'********************************************************






$regfile = "attiny13.dat"
$crystal = 580000                                           'fuse 4,8Mhz kb. igy 1sec

$hwstack = 8
$swstack = 8
$framesize = 16




 Config Portb.2 = Input                                     'ablaktörlő kapcsoló
 Config Portb.1 = Output                                    'kimenet
 Config Portb.4 = Output                                    'figyelő led



Led Alias Portb.4
Be Alias Pinb.2
Ki Alias Portb.1

Dim Alap As Word
Dim Utem_ido As Word
Dim Figyel As Word

Const Torol_ido = 800                                       'törlés inditáshoz szükséges idő


Pinb = &B0000000                                            'port beállítások
Portb.1 = 1



Utem_ido = 420                                              'alap törlési ütem: ha csak simán bekapcs kb.5 sec

Main:
Figyel = 0

Do


 Do

  If Be = 1 Then                                            ' Ha be van kapcsolva
  Waitms 20
  If Be = 1 Then                                            'Prell mentesit
  Figyel = 0

  Gosub Be1                                                 'Töröl
 End If
 End If

Loop


  Be1:


  If Be = 1 Then                                            'Ha be van kapcsolva töröl

  Led = 0
  Ki = 0
  Waitms Torol_ido
  Ki = 1
  For Figyel = 0 To Utem_ido                                'Alap vagy figyelt időközönként töröl

  Waitms 10

  If Be = 0 Then                                            'Ha törlés után kikapcsolom figyelni kezdi az időt
  Goto Varak                                                'Ugrás az idő figyeléséhez
  Else
  Next
  End If
  End If




  If Be = 0 Then
  Gosub Varak
  End If
   Loop


  Varak:
  Utem_ido = 0                                              'Ütem idő törlése
  Figyel = 1                                                'Figyelő led jelez
  Do
  If Be = 0 Then                                            ' Ha kikapcs. figyelés indul
  Led = 1                                                   'Figyelő led jelez
  Utem_ido = Utem_ido + 1                                   'Ütemidő növekszik
  Waitms 10
  End If

  If Utem_ido > 6000 Then                                   ' Ha figyelés több mint 1 min
  Utem_ido = 420                                            'Vissza állítva alapra, figyelés kikapcs.
  Led = 0                                                   'Figyelő led kikapcs

  Goto Main                                                 'Alapállapot indul
  End If

  If Be = 1 Then
  Return
  End If


  Loop
Remélem tudtam segíteni!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Tessék kiegészíteni és a versenyre beküldeni:)
Avatar
willmenn
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2012. július 14. szombat, 6:00

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

A kiegészítést a kapcsolási rajzra értetted?
Válasz küldése