Program írás help

Ide kerültek azok a témák melyek nagyon összevissza voltak. Olvasni lehet őket, de írni hozzá már nem.
Lezárt
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

a Bascom könyvtár -> Samples -> AVRDOS.

A prg elég hosszú, így érdemes ott meglesni. Ezzel megy.
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Abban a könyvtárban "Config_" kezdetű .bas fájlokat és néhány .cfg fájlt találtam. A "Config_" kezdetűek legelején ott a figyelmeztetés:

' THIS IS AN INCLUDE FILE
' DO NOT COMPILE

Ezek szerint a "CONFIG_AVR-DOS.bas" és a "Config_MMC.bas"
fájlokra kell a program elején hivatkozni az $include -del, és akkor működni fognak az AVR-DOS-os utasítások?

Ezek szerint a programnak így kellene kezdődnie?

$lib "AVR-DOS.Lbx"
$lib "MMC.Lbx"

$include "CONFIG_AVR-DOS.bas"
$include "Config_MMC.bas"

.
.
.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Igen, ha jól rémlik nálam így van...
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

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

Üdv!

Hétvégén majdnem kitört a barbár belöllem. Kissé átszabtam a kisérletipanelt, de a test nem talált el az AT-ig. Persze nem vettem észre, rá is ment egy napom :oops:
De ez már a multé.
A legelső volt, hogy a szabaddá vált portokat tesztelgettem. Szomorúan vettem észre a D0 és D1 nem ad életjelet.(ATmega16)
Van valamilyen biztosíték amivel be lehet kapcsolni :?:


Bizergáló:

$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600

Ddrc = 255
Ddrd = 255

Dim X As Byte

Do

Gomb1:
For X = 0 To 7

Reset Portd.x

Waitms 100

Set Portd.x

Next X

Gomb2:
For X = 0 To 7

Reset Portc.x

Waitms 100

Set Portc.x

Next X

Loop
End
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

PortD-n elvileg nem iagzán van semmi. Illetve:
PortD.0 és PortD1: Sorosport!

Ha $baudot írsz, akkor az már a D0 áés D1-et a sorosportnak tartja fenn az IO helyett!

A Prg-ből vedd ki ezt a $baud sort....
Onnan minden OK.
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

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

Így van, s lőn világosság :)
Következő problémám: a 3x4-es bill. mátrix kezelő progiban nem regál a gombnyomásra.

$regfile = "m16def.dat"
$crystal = 16000000
Ddrc = 255
Ddrd = 255
Ddrb = 0
Portb = 30
Dim X As Byte
Dim Y As Byte
Dim E As Byte
Dim T As Byte
Dim Egyes As Byte
Dim Tizes As Byte

Do

Billfigy:
X = Pinb
If X <> 30 Then 'billentyű lenyomva szegmens:ok
Tizes = 10
Egyes = 10
Goto Kiiro
Goto Billfigy
Else 'billentyűk szabadon szegmens:..
Tizes = 12
Egyes = 11
Goto Kiiro
End If

Loop

Kiiro:
E = Lookup(egyes , Minta1)
Portc = E
T = Lookup(tizes , Minta10)
Portd = T
Waitms 100
Portc = 255
Portd = 255
Goto Billfigy

End

Minta10:
Data 33 , 189 , 19 , 25 , 205 , 73 , 65 , 61 , 1 , 9 , 209 , 211 , 254 '0,1,2,3,4,5,6,7,8,9,o,c,.
Minta1:
Data 132 , 215 , 76 , 69 , 55 , 37 , 36 , 199 , 4 , 5 , 60 , 251 '0,1,2,3,4,5,6,7,8,9,k,.


kapcsolásban:B0-másra (lo)
..........hi...B1--x-x-.x
......................l...l...l
..........hi...B2--x-x-.x
......................l...l...l
..........hi...B3--x-x-.x
......................l...l...l
..........hi...B4--x-x-.x
......................l...l...l
.....................[].[]..[] (3x1ko ellenállás)
......................l...l...l
....................B5.B6.B7
.
.
.....................lo lo lo


Ciklussal behelyettesítve a billfigy részét símán számol 100-ig.
Valamit a portbeállítás és láblekérdezésnél baltázok el :!: :?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ha DDRB=0, akkor az összes láb INPUT!

De nem egyszerűbb a getkbd függvényt használni?
A kézikönyvben benne vannak a mintaprogik, én azért elővenném néha:)

http://avr.tavir.hu/modules.php?name=Co ... age&pid=20
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Csak nem boldogulok az AVR-DOS-szal. Hiába a korábban felsorolt néhány include, fordításkor hibák tucatját írja ki, általában nem deklarált változókra hivatkozva. Holott ezeknek a fájloknak annyira elő kellene készítenie a "terepet", hogy a DOS-os utasításokat végre kéne hajtania a Bascom-nak, mindenféle további utasítások nélkül, nem?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Demo v. reg Bascom?

Ha demo, akkor az 1odoben megnyitott filek szama max 1 lehet!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

PCF8563 ill PCF8583 chip

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

Sziasztok!

Mintaprogi adott 8egesz jo), de naha osszezavarodik. Most vagy panel, vagy progi. Vkinek tippje?:)


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

'--- Alapadatok ---

$crystal = 14745600                                         'Sebesseg
$regfile = "M16def.dat"                                     'Chip
$baud = 9600
'configure the used port pin for I2C
Config I2cdelay = 10                                        ' default slow mode:5
Config Sda = Portc.1
Config Scl = Portc.0


Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2





' ---------[ Initialisierung ]--------
Cursor = Off                                                ' Cursor ausschalten
Cls

Dim S As Byte , M As Byte , H As Byte , D As Byte , Month As Byte
Dim Wm As Byte , Yd As Byte


'-----[ Hauptprogramm ]----------------------------------------

Wm = 3
D = 8
Month = 2
Yd = 1
H = 22
M = 00
S = 00

Settime:
    'values are stored as BCD values so convert the values first
    S = Makebcd(s)                                          'seconds
    M = Makebcd(m)                                          'minuts
    H = Makebcd(h)                                          'hours
    D = Makebcd(d)                                          'days
    Month = Makebcd(month)                                  'months
    Yd = Makebcd(yd)                                        'seconds
    Wm = Makebcd(wm)                                        'minuts

    I2cstart                                                'generate start
    I2cwbyte &HA2                                           'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstop                                                 'generate stop

    I2cstart                                                'generate start
    I2cwbyte &HA2                                           'write mode
    I2cwbyte 2                                              'select seconds Register
    I2cwbyte S                                              'write seconds
    I2cwbyte M                                              'write minuts
    I2cwbyte H                                              'write hours
    I2cwbyte Yd                                             'write jear
    I2cwbyte D                                              'write day
    I2cwbyte Wm                                             'wirte weekday
    I2cwbyte Month                                          'write month
    I2cstop                                                 'generate stop

    Goto Gettime


Gettime:
    I2cstart                                                'generate start
    I2cwbyte &HA2                                           'write addres
    I2cwbyte 2                                              'select second register
    I2cstart                                                'generate repeated start
    I2cwbyte &HA3                                           'write address for reading
    I2crbyte S , Ack                                        'read seconds
    I2crbyte M , Ack                                        'read minuts
    I2crbyte H , Ack                                        'read hours
    I2crbyte Yd , Ack                                       'read year
    I2crbyte D , Ack                                        'read day
    I2crbyte Wm , Ack                                       'read weekday
    I2crbyte Month , Nack                                   'read month

    I2cstop                                                 'generate stop

Goto Zeit


Zeit:

   S = Makedec(s)
   M = Makedec(m)
   H = Makedec(h)
   Yd = Makedec(yd)
   D = Makedec(d)
   Wm = Makedec(wm)
   Month = Makedec(month)

   If H >= 10 Then
   Locate 1 , 1 : Lcd H
   Else
   Locate 1 , 1 : Lcd " " ; H
   End If

   Locate 1 , 3 : Lcd ":"

   If M >= 10 Then
   Locate 1 , 4 : Lcd M
   Else
   Locate 1 , 4 : Lcd "0" ; M
   End If

   Locate 1 , 6 : Lcd ":"

   If S >= 10 Then
   Locate 1 , 7 : Lcd S
   Else
   Locate 1 , 7 : Lcd "0" ; S
   End If

   Locate 2 , 1 : Lcd D ; "." ; Month ; "." ; Yd ; " " ; Wm

   Waitms 100

Goto Gettime
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

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

Hi!
Én egy hete, a tápfesz miatt -csati kontakt hiba- görcsöltem. A progid nekem még kínai, így hardver nélkül pláne :) , de mivel rendszertelen hibáról írsz, én a mérhető oldalról közelíteném meg.
Alább egy szerintem egyszerű, de nagyszerű GETKBD kód megjelenítő( mivel mátrix kódokat nem találtam, hát llekérdeztem) :P


$regfile = "m16def.dat"
$crystal = 16000000

Config Kbd = Pinb 'b-porton a mátrix
Ddrc = 255 'c és d-portokon a 7-7szegmens
Ddrd = 255 'a Minta1 és Minta10 az 1-es és 10-es helyértékek
'én 2 közös anódos kijelzőt használok így a szegmens kódok: 255-portok,
' ha katódosak akkor símán szegmens kód=portok :-)
Dim Bk As Byte
Dim Es As Byte
Dim Ts As Byte
Dim Te As Byte
Dim E As Byte
Dim T As Byte


Do 'lekérdezés és átkódolás
Bk = Getkbd()
For Ts = 0 To 90 Step 10
For Es = 0 To 9
Te = Ts + Es
If Bk = Te Then
Goto Kiiro
Else
End If
Next Es
Next Ts






Kiiro:
E = Lookup(es , Minta1) 'megjelenítés
Portc = E
Ts = Ts / 10
T = Lookup(ts , Minta10)
Portd = T
Waitms 1
Portc = 255
Portd = 255
Loop

End

Minta10:
Data 33 , 189 , 19 , 25 , 205 , 73 , 65 , 61 , 1 , 9 , 209 , 211 , 254 '0,1,2,3,4,5,6,7,8,9,o,c,.
Minta1:
Data 132 , 215 , 76 , 69 , 55 , 37 , 36 , 199 , 4 , 5 , 60 , 251 '0,1,2,3,4,5,6,7,8,9,k,.


UI: remélem lessz akinek hasznára válik :wink:
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Robert írta:Demo v. reg Bascom?

Ha demo, akkor az 1odoben megnyitott filek szama max 1 lehet!
A "Config_Avr-Dos.bas" fájlba beleillesztettem a "Config_MMC.bas" fájlt, így csak egy include-ra van szükség. De továbbra is az a helyzet, hogy fordításkor "Label Not Found" hibaüzeneteket kapok. A $lib is megnyitott fájlnak számít? Mert ha igen, akkor itt van a kutya elásva.
A 1.11.8.1-es demo van fent egyébként, az proci pedig M32-es, azaz elvileg ezzel nem lehetne probléma!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Nem úgy 1 file!
A CF/MMC kártyáról nyitsz meg 1 filet egyidőben...

A Label not found az mást takar.... Egy Goto/Gosub cimke hiányzik
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Értem. Egyébként végre megy a fordítás, de "Out of SRAM Space" hibát ad. Hogy a bánatban nem elég neki a memória, amikor kizárólag a "gyári" AVR-DOS-os cuccok vannak még csak benne, s amik alapból kellenek a működéshez?! Kezd nagyon elegem lenni belőle Nem létezik, hogy kevés neki az M32-es, amikor láttam már M16-al is SD-s alkalmazást :twisted:
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Memória-gond oka:

A Config_AVR_DOS.bas fájlban át kellett írni a FAT-buffer méretét 1078 byte-ról 561 byte-ra. Végre hiba nélkül megy a fordítás!

Akkor próbáljuk meg a legegyszerűbb dolgot, nézzük meg, mennyi hely van a kártyán, ill. mekkora a kártya mérete!
Ott a mintaprogram a HELP-ben:

Dim Gbtemp1 As Byte' scratch byte
Gbtemp1 = Initfilesystem(1)' we must init the filesystem once

If Gbtemp1 > 0 Then
Print#1 ,"Error "; Gbtemp1
Else
Print#1 ," OK"

Print "Disksize : "; Disksize()' show disk size in bytes
Print "Disk free: "; Diskfree()' show free space too

End If

Kártya a foglalatban, elvileg két directory van rajta, pár pici fájllal, tehát nem üres. Táp be, terminal fut, megjelenik az újabb rejtély:

Error 229

Ilyen számon AVR-DOS hiba nincs! Most mi van???
Lezárt