AVR v jazyce BASCOM - jednoduchý program na ovládání LED

Dobrý den, mám programování mikroprocesorů Atmel v jazyce BASCOM jako maturitní práci a nikdy jsem v tom nedělal. Napsal jsem si jednoduchý program na ovládání LED pomocí tlačítek (viz. zdojový kód), ale po kompilaci a spuštění nic nezobrazuje a přitom vypadá, že běží. Nemůže mi s tím někdo poradit?

$regfile = “8515def.dat”
$crystal = 8000000

Dim P As Byte
Config Portb = Output
Config Porta = Input
P = &H00
Do

Portb = P
If Pina.0 = 0 Then
Incr P
End If

If Pina.1 = 0 Then
Decr P
End If

If Pina.2 = 0 Then
Shift P , Left
End If

If Pina.3 = 0 Then
Shift P , Right
End If

If Pina.4 = 0 Then
Rotate P , Left
End If

If Pina.5 = 0 Then
Toggle P
End If

If Pina.6 = 0 Then
P = &HFF
End If

If Pina.7 = 0 Then
P = &H00
End If

Waitms 200

Loop
End

A pokud možno, jestli by jste mi mohl někdo ještě prosím poradit, jak bych mohl naprogramovat příklad s ADC input, aby při posouvání posuvníku zobrazoval čísla na LCD? Moc děkuji.

:arrow_right: administrator: přejmenováno z "Maturitní práce - AVR v jazyce BASCOM"

Znamená to, že za celé 4 roky vám vaši učitelé neřekli ani slovo o programování Avr v jazyce Bascom?

Přesně tak. Co se týče tohoto, nedělali jsme to a bohužel jsem toto téma chytil.

Proto bych byl rád za každou radu.

Tomu nerozumím. Dostal jsi snad omylem maturitní práci z jiného oboru než studuješ?

Pro můj obor bylo na výběr asi 25 témat na maturitní práci pro cca 40 lidí, ti co to nestihli si bohužel museli vybrat téma jiné.

Nevím co k tomu dodat.
Tazatel říká, že mikroprocesory Avr a Bascom nikdy ve škole neprobírali ale přesto jim je zadali jako maturitní práci.

Sežeň si knihu Mikrokontroléry ATMEL AVR programování v jazyce Bascom.
Tady máš ukázku voltmetru(přesně to co potřebuješ)
Voltmetr_Bascom.GIF

Tu jsem osobně nedávnou zkoušel a nefungovalo mě to. Problém byl zřejmě v knihovně.

Tento problém mě pomohl vyřešit AB:

Můžu sem dát případně jak jsem to řešil pak sám. Byl to voltmetr do 5V, ale snadno se dá upravit na libovolné napětí.

Díky, vyzkouším to. A prosím, jestli by jsi mi sem mohl vložit jak jsi to řešil ty.

Tuto knihu mám a podle toho jsem ten příklad zkoušel, ale bohužél jsem měl problém s tou knihovnou “lcd4lib.lbx”.

Pokud budeš chtít finální verzi, kde to ukazuje na 2 desetinný místa a ne na 20, tak to sem večer z domova hodím. Tady to zaoukrohlování nefungovalo. Jinak kód jsem našel v mém již zmiňovaném topicu.

[code]$regfile = “m48def.dat”
$crystal = 8000000

Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , _
Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5

Dim X As Single
Dim Y As Single
Dim Z As Single
Dim V As Single
Dim A As Word
Config Adc = Single , Prescaler = Auto
Config Lcd = 16 * 2

Cursor Off
Lcd “Voltmetr”
Wait 1
Lowerline
Cls

Start Adc

Do
A = Getadc(0) 'Nacteni y AD prevodniku
X = 4.8875 * A 'Prepocet na volty
Y = X / 10 ’ Posunutí desetinné tečky o jednu vlevo
Z = Round(y) ’ Zaokrouhlení na celé číslo
V = Z / 100 ’ Získání čísla s dvěma desetinými místy
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd Str(v) + " V "
Waitms 20 ’ Zobrazení na displeji
Loop
End[/code]

Na ty 2 desetinná místa by to bylo lepší. Moc děkuji.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Tak už jsem dorazil z práce domů:

[code]’ Jednoduchy volnmetr do 5V
’ ----------------------------------
$regfile = “m48def.dat”
$crystal = 8000000

Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , _
Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5

Dim X As Single
Dim Y As Single
Dim Z As Single
Dim V As Single
Dim A As Word
Dim Volt As String * 20
Dim Voltx As String * 20
Config Adc = Single , Prescaler = Auto
Config Lcd = 16 * 2

Cursor Off
Lcd “Voltmetr”
Wait 1
Lowerline
Cls

Start Adc

Do
A = Getadc(0) 'Nacteni y AD prevodniku
X = 4.8875 * A 'Prepocet na volty
Y = X / 10 ’ Posunutí desetinné tečky o jednu vlevo
Z = Round(y) ’ Zaokrouhlení na celé číslo
V = Z / 100
Voltx = Str(v)
Voltx = Left(voltx , 4) ’ Získání čísla s dvěma desetinými místy
Locate 2 , 1
Lcd " "
Locate 2 , 1
If Len(voltx) = 3 Then
Volt = Voltx + "0 V "
Else
Volt = Voltx + " V "
End If
Lcd Volt
Waitms 20 ’ Zobrazení na displeji
Loop
End[/code]

Mockrát děkuji.

Promiň, že ještě otravuju, při kompilaci toho programu mi to vyhodí hlášku “Unsupported DAT file”. Když se podívám do nastavení na chipy, tak m48 tam není. Nevíš co bych s tím měl udělat?

Důvod je zřejmý - já tam mám ATmega48 ale ty 8515. Tak musíš prohodit můj za svůj definiční řádek pro chip *$regfile = “m48def.dat” * za svůj $regfile = “8515def.dat” a snad to poběží. Jelikož mě překvapuje, že by to mělo být AVR a není ATtiny ani ATmega.

Přepsal jsem to na $regfile = “8515def.dat” a dal kompilovat, dole vyskočila chyba: Error: 101 Line: 26 Can’t find HW-register {ADMUX } , in File: C:/…, je to řádek “A=Getadc(0)”.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Dobrý, už to funguje, díky moc.

DOVOLÍM SI PŘIPOJIT DVA ODKAZY:
edunet.souepl.cz/~weisz/doku … ace_bascom
mp222.wz.cz/index.php