pwm jelgenerator + bovitesek

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Portb.1-nel csak a "255" helyett kell "1"?

Cntr nem valtoztat semmit, csak tarol. Amint eleri a beirt erteket, a portb.1 labat negalja.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

A cntrl lábnegálást nem látom a programban.....

A portb.1=0/Portb.1=1 kell legyen. A 255reelvileg hibával fordul.


Más: A chip ami készül 90S2313 vagy ATTiny2313?
A deklaráció szerint 90S2313.....
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Tiny2313 lesz majd, de ezzel nem is foglalkoztam...
"ATtiny13.dat"

"portb.1=1", rendben

A negalast es a ketszeres if-then-else-el gondoltam megoldani.

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

if pind.2 = tarolo then

   if portb.1 = 0 then    "ha nincs 5V a kimeneti labon"
   portb.1 = 1              "kapcsoljon ra 5V-t"

   else                        "kulonben ha 5V van a kimeneti labon"

   portb.1 = 0             "kapcsolja le az 5V-t"

        end if                "elso if-then-else zarasa"

end if                         "masodik if-then-else zarasa"

loop 

Amit meg kifelejtettem, hogy be kell tenni meg egy szamlalo nullazast a loop ele, hogy ujra tudjon futni a program.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

Ez a Cnt-s rész még nem világos.... :(

Az órajelbeállításra vigyázz!. A T2313-ban a biztosítékbiteknél a DivClk8-DISABLE-re rakandó!
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Leirom megegyszer, hogy mit szeretnek:

A szamlalo fuggvenyeben kapcsljon 0-, vagy 5V-ot.
Ugy indul, hogy van a portb.1 labon 5V (portb.1 = 1).

A szamlalo eleri beallitott hatart (elso if-then-else elagazas), akkor megvizsgalja, hogy a portb.1-en 5-, vagy 0V van-e (masodik if-then-else elagazas).

Igazabol a portb.1 erteke teljesen mindegy, mert barmelyik agon fut tovabb a program, a vegeredmenye mindig az lesz, hogy:

ha 5V volt, akkor 0V-ra kapcsolja
ha 0V volt, akkor 5V-ra kapcsolja

Nem tudom igy vilagos-e, hogy mit szeretnek. Lehet nem a legelegansabb megoldas, de szerintem mukodnie kellene.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

Port ellenkezőbe kapcsol

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

  toggle portb.4
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Akkor hasznalom ezt, koszi!


Vacsora kozben bogyoztam, hogy lehet nem volt szerencses a "negalas", mint szohasznalat.

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

$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600

config portb.1=output
config portb.2=output
Config Pind.2=Input

dim a as long, l as long
dim Cntr As Integer
dim tarolo as word

On Int0 Button
Config Int0 = rising

portb.1=1


Enable Interrupts
Enable Int0


input"freki?",a          		'0-30.000Hz'
input"számláló értéke?", tarolo 	'0-65.535'

do
   for l = 1 to a
       nop
   next l
toggle portb.2 'ezen a labon van a kimenet....
   for l = 1 to a
       nop
   next l

Locate 1 , 1
  Waitms 250

if pind.2 = tarolo then

	if portb.1 = 0 then
	toggle portb.1
	
	else
	
	toggle portb.1

	end if

end if

loop

Button:
  Incr Cntr
Return


end 

Most a kod...


Kiemelten:

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

if pind.2 = tarolo then  "ha a számláló egyenlo a "tarolo" ertekevel

	if portb.1 = 0 then      "megnezi a portb.1 erteket, ha ez 0 (azaz 0V)
	toggle portb.1             ""ellenkezobe" kapcsol, azaz 5V lesz"
	
       else                            "ha viszont 5V van mar rajta"
	
	toggle portb.1             ""ellenkezobe" kapcsol, azaz 0V lesz"

	end if                         "2. felteteles elagazas vege"



end if                                "1. felteteles elagazas vege"
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

Azt a 2 feltételes elágazást nézd meg....

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

 if portb.1 = 0 then
   toggle portb.1
   else
   toggle portb.1
 end if
ha igaz, csinálok valamit.
ha hamis, akkor is csinálom, ugyanazt :P

Minek az IF? A Toggle nem tudja mi volt előtte. Amikor kiadod, megnézi a port állapotát és az ellenkezőjére kapcsol.
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Oke, rendben... :lol:

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

if pind.2 = tarolo then

     toggle portb.1
   
end if 

A szamlalo nullazashoz mit kell resetelni?

"reset Cntr" ?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

cntr=0
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Azt gondolom, hogy ez lenne a vegleges kod beegetes elott:

16MHz-es kvarc, 38.4kbps, avrcalc masra nekem nem kell, mert vegul is nem timer-rel lett megoldva. Jol gondolom?

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

$regfile = "2313def.dat"
$crystal = 16000000
$baud    = 38400

config portb.1 = output
config portb.2 = output
Config pind.2  = input

dim a as long, l as long
dim Cntr As Integer
dim tarolo as word

On Int0 Button
Config Int0 = rising

portb.1 = 1

Enable Interrupts
Enable Int0

input"frekvencia?",a               '0-30.000Hz'
input"számláló értéke?", tarolo    '0-65.535'


do

   for l = 1 to a
   	nop
   next l

toggle portb.2                     'ezen a labon van a kimenet'

   for l = 1 to a
	nop
   next l

Locate 1 , 1

  Waitms 250

if pind.2 = tarolo then

  toggle portb.1
  cntr = 0

end if


loop

Button:
  Incr Cntr
Return

end
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

38400 bps az sorosporti sebesség. Független bármi mástól.
Én 9600 vagy 57200 bps (115200bps)-t használnék, ezek a gyakoribbak.


Az A értékével játszod be a frekvenciát. Kalibrálnod kell majd úgyis.
For-nop-next helyett lehet hogy For-waitus 1-next kell, ha kis számokat akarsz beírni az A értékere.


Az LCD-re kiírást felejtsd el a ciklusban. A Locate 1,1 ideje: ~5-25 msec.
A waitms 250 1/4 sec-t várakozik.
Mit keres ott az LCD, ha nem is használod????
Tessék a programmagból kidobni a prg-mag elé.
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Az elso bekezdest ertem, a masodikat is.

Harmadik bekezdes:

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

Locate 1 , 1

  Waitms 250 
Mehet a kukaba?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

Igen. LCD-t nem használsz. Akkor minek?
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00
Tartózkodási hely: Veszprem
Kapcsolat:

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

Rendben, akkor ertem. Megzavart a "dobjam ki a programmag ele".

Kozben benyomtam bascomba, compile utan:

"error 31 - invalid datatype"

39-es sorra mutat:

"If Pind.2 = Tarolo Then"

Nem jo a tarolo igy leirva?
Válasz küldése