Sari la conținut
ELFORUM - Forumul electronistilor

BASCOM


yo9hnf

Postări Recomandate

Salut ywar2!Ca simulator folosesc BASCOM si un Proteus Lite (are limitari), dar ce am afirmat cu privire la "secunda" este rezultatul unor incercari pe placa mea de "dezvoltare" de care unii mai rad!

Link spre comentariu
Vizitator andreflo

Salut,Sunt incepator , se poate simplifica urmatoarea secventa de cod:Select Case Fade Case 1 :Locate 2 , 1Lcd Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 2 :Locate 2 , 1Lcd Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 3 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 4 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 5 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 6 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 7 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 8 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 9 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 10 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 11 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 12 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) Case 13 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) ; Chr(0) Case 14 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) ; Chr(0) Case 15 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) ; Chr(0) Case 16 :Locate 2 , 1Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(2) ; Chr(3) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(1) End SelectI2csend &H88 , Att_rfI2csend &H88 , Att_lfI2csend &H88 , Att_rrI2csend &H88 , Att_lrEnd SubMultumesc anticipat

Link spre comentariu

Salut. Uite la ce m-am gindit eu: faci un tabel care contine toate secventele pe care doresti sa le afisezi, in functie de valoarea lui Fade calculezi unde se afla indexul celor 16 caractere si apoi afisezi urmatoarele 16 locatii.

Uite un exemplu de cod:

 

DDim Fade As ByteDim X As ByteDim Y As ByteDim Z As ByteLocate 2 , 1                                                'pozitioneaza cursorul in pozitia de startDecr Fade                                                   'toate valorile lui FADE trebuie sa fie in intervalul 0...15Z = Fade * 16                                               'calculeaza pozitia caracterelor din tabel ce urmeaza a fi afisate                                              'For X = 0 To 15                                             'urmatoarele 16 caractere vor fi afisate   Y = Lookup(z , Tabel)                                    'se identifica caracterul   Lcd Chr(y)                                               'se afiseaza caracterul   Incr Z                                                   'se selecteaza caracterul urmatorNext X.....EndTabel:Data 1 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 1 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 1 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 1 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 1 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 1 , 0 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 1 , 0 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 1 , 0 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 1 , 0 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 1 , 0 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 1 , 0Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 1
Sau altul, ideea mi-a venit in timp ce iti scriam exemplul de mai sus:

Locate 2 , 1                                             'pozitioneaza cursorul in pozitia de start   Decr Fade                                                'toate valorile lui FADE trebuie sa fie in intervalul 0...15                                                                                          '   For X = 0 To 15                                          'urmatoarele 16 caractere vor fi afisate   Y = Lookup(z , Tabel)                                    'se identifica caracterul      If Fade = X Then                                      'cind pozitia lui FADE este egala cu cea selectata in tabel         Y = Y * 1                                          'se calculeaza valoarea ce urmeaza a fi afisata                                                            '1 este valoarea care se deplaseaza         If Y = 0 Then Y = 1                                'daca rezultatul este 0 atunci el va devenii 1                                            End If   Lcd Chr(y)                                               'se afiseaza caracterul   Incr Z                                                   'se selecteaza caracterul urmator   Next X....EndTabel:Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Link spre comentariu

@nico_2010

O sa incerc maine programul pus de tine. Iti multumesc !

 

 

Pana una-alta, iar ma freaca DS18b20.

Am "mixat" mai multe programe gasite pe net, pana mi-a iesit progamul de mai jos.

Pe langa faptul ca nu inteleg cum pot afisa doua temperaturi de la doi senzori in acelasi timp pe LCD, pe linia 1 senzor 1 iar pe linia 2 senzor 2, mai am o problema....

 

Am incercat sa implementez functiile de minim si maxim pentru temperatura masurata.

Probleme :

1. De ce min>W face practic min ?

2. Pe afisaj imi apare pe linia 2, la fiecare senzor :

Min : 0 Max: 23 (de ex). De ce MIN mi-l ia nul?

 

Va multumesc tuturor !

 

PS : Programul e aici

 

$regfile "m32def.dat"

$crystal = 16000000

 

 

Config Lcd = 16 * 2

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

 

Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' replace ? with number (0-7) 0 pentru GRAD CELSIUS

 

Declare Sub Convallt ' Convert T on ALL sensors

Declare Sub Meas_to_cel(offset As Byte)

Declare Sub Temp_to_decicel

Declare Sub Disp_temp(cnt As Byte , Offset As Byte)

 

' Up to 8 devices - each having an 8 byte ROMID

Const Max1wire = 8

Dim Dsid(64) As Byte ' Dallas ID 64bit inc. CRC

Dim Sc(9) As Byte ' scratch pad

Dim Cnt1wire As Byte ' Number of 1-wire devices found

 

Dim Cel As Integer

Dim Cel_frac_bit As Byte

Dim Subzero As Byte

Dim Temp As Integer

 

'Temp variables

Dim B As Byte

Dim B1 As Byte

Dim B2 As Byte

Dim I As Byte

Dim W As Word

 

'----------------RADU

Dim Min1 As Word

Dim Max1 As Word

Dim Min2 As Word

Dim Max2 As Word

'----------------RADU

 

Const Ds18b20_conf_reg = 4

 

' constant to convert the fraction bits to cel*(10^-4)

Const Ds18x20_fracconv = 625

 

' DS18x20 ROM ID

Const Ds18s20_id = &H10

Const Ds18b20_id = &H28

 

' COMMANDS

Const Ds18x20_convert_t = &H44

Const Ds18x20_read = &HBE

Const Ds18x20_write = &H4E

Const Ds18x20_ee_write = &H48

Const Ds18x20_ee_recall = &HB8

Const Ds18x20_read_power_supply = &HB4

 

'LCD config

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

'Config Lcd = 16 * 1a

 

Config 1wire = Portd.4 ' DS1820 on Port B.4 (mega8 pin 18)

 

Cursor Off

Cls

 

Lcd "1-wire DS18x20"

Wait 1

Cls

 

' Gather ROM ID for all 1-wire devices

Cnt1wire = 1wirecount()

If Cnt1wire > Max1wire Then

Cnt1wire = Max1wire

End If

 

B = 1

Dsid(b) = 1wsearchfirst()

For I = 1 To Cnt1wire

B = B + 8

Dsid(b) = 1wsearchnext()

Next

 

' Show what we found on the bus

B1 = 1

B2 = 8

For I = 1 To Cnt1wire

Cls

If Dsid(b2) = Crc8(dsid(b1) , 7) Then

Lcd "CRC OK sensor " ; I

Waitms 500

Cls

Lcd "ROM ID "

For B = B1 To B2

Lcd Hex(dsid(b))

Next

Else

Lcd "CRC BAD sensor " ; I

End If

Wait 1

B1 = B1 + 8

B2 = B2 + 8

Next

 

' Monitor temperature sensors

Do

Convallt

Waitms 750

 

B = 1

For I = 1 To Cnt1wire

 

If Dsid(b) = Ds18s20_id Or Dsid(b) = Ds18b20_id Then ' Only process TEMP sensors

1wverify Dsid(b) 'Issues the "Match ROM "

If Err = 1 Then

Cls

Lcd "18x20 not on bus" 'where did it go?

Elseif Err = 0 Then

1wwrite Ds18x20_read

Sc(1) = 1wread(9)

If Sc(9) = Crc8(sc(1) , 8) Then

Call Disp_temp(i , B)

If I < Cnt1wire Then ' if more 1-wire devices.

Wait 1

' SE SETEAZA TIMPUL DE AFISARE PT TEMP 1

End If

End If

End If

End If

 

B = B + 8

Next

 

Loop

 

End

 

'Makes the Dallas "Convert T" command on the 1w-bus configured in "Config 1wire = Portb. "

'WAIT 200-750 ms after issued, internal conversion time for the sensor

'SKIPS ROM - so it makes the conversion on ALL sensors on the bus simultaniously

'When leaving this sub, NO sensor is selected, but ALL sensors has the actual

'temperature in their scratchpad ( within 750 ms )

Sub Convallt

1wreset ' reset the bus

1wwrite &HCC ' skip rom

1wwrite Ds18x20_convert_t

End Sub

 

' output is:

' - cel full celsius

' - fractions of celsius in millicelsius*(10^-1)/625 (the 4 LS-Bits)

' - subzero =0 positiv / 1 negativ

Sub Meas_to_cel(offset As Byte)

Dim Meas As Word

 

Meas = 0

Meas = Makeint(sc(1) , Sc(2))

 

' 18S20 is only 9bit upscale to 12bit

If Dsid(offset) = Ds18s20_id Then

Meas = Meas And &HFFFE

Shift Meas , Left , 3

B1 = 16 - Sc(6)

B1 = B1 - 4

Meas = Meas + B1

End If

 

If Meas.15 = 1 Then

Subzero = 1

' convert to +ve, (two's complement)++

Meas = Meas Xor &HFFFF

Incr Meas

Else

Subzero = 0

End If

 

If Dsid(offset) = Ds18b20_id Then

B1 = Sc(ds18b20_conf_reg)

' clear undefined bit for != 12bit

If B1.5 = 1 And B1.6 = 1 Then ' 12 bit

' nothing

Elseif B1.6 = 1 Then ' 11 bit

Meas = Meas And &HFFFE

Elseif B1.5 = 1 Then '10 bit

Meas = Meas And &HFFFC

Else ' 9 bit

Meas = Meas And &HFFF8

End If

End If

 

Cel = Meas

Shift Cel , Right , 4

Cel_frac_bit = Meas And &HF

End Sub

 

' input: cel, cel_frac_bit, subzero

' output: temp (as decicelsius)

' ie 289 = 28.9C

Sub Temp_to_decicel

Temp = Cel_frac_bit * Ds18x20_fracconv

Temp = Temp / 1000

Cel = Cel * 10

Temp = Temp + Cel

If Subzero = 1 Then

Restore Rounding

For B1 = 1 To 8

Read B2

If Cel_frac_bit = B2 Then

Incr Temp

Exit For

End If

Next

End If

End Sub

 

' Display the temperature

' INPUT: temp

Sub Disp_temp(cnt As Byte , Offset As Byte)

Call Meas_to_cel(offset)

Call Temp_to_decicel

 

 

 

Cls

 

 

 

'-----------------

 

 

 

W = Temp / 10

B1 = Temp Mod 10

' Lcd W ; "." ; B1

' Lcd Chr(0) ; "C"

 

 

 

If I = 1 Then

Locate 1 , 1 ' MODIFICAT DE MINE

Lcd "Temp In:" ; " " ; W ; "." ; B1 ; Chr(0) ; "C"

If Min1 > W Then Min1 = W

If Max1 < W Then Max1 = W

Locate 2 , 1

Lcd "Min :" ; Min1 ; " Max:" ; Max1

End If

 

 

If I = 2 Then

Locate 1 , 1

Lcd "Temp OUT:" ; " " ; W ; "." ; B1 ; Chr(0) ; "C"

 

If Min2 > W Then Min2 = W

If Max2 < W Then Max2 = W

Locate 2 , 1

Lcd "Min :" ; Min2 ; " Max:" ; Max2

End If

'-----------------

 

'Lcd "TEMP " ; Cnt ; " " 'ASA ERA ORIGINAL

 

 

 

' If Subzero = 1 Then ' ASA ERA ORIGINAL

' Lcd "-"

' Else

' Lcd "+"

' End If

 

'' W = Temp / 10

' B1 = Temp Mod 10

' Lcd W ; "." ; B1

' Lcd Chr(0) ; "C"

 

'-----------------

 

End Sub

 

Rounding:

Data 1 , 3 , 4 , 6 , 9 , 11 , 12 , 14

Link spre comentariu
  • 3 săptămâni mai târziu...

yo9hnf, daca inca n-ai renuntat la idee hai sa facem impreuna cu alti elforumisti interasati un proiect pentru un ceas cu uC AVR si afisaj cu 7.1 segmente cu LED-uri . Vrei?

Nu am renuntat.....si nu pentru ca am nevoie de un ceas, ci pentru ca inca nu e "rezolvata" problema.

 

Am gasit pe un site sovietic un program care vad ca merge pe Anod Comun, dar problema e ca imi afiseaza caracterele aiurea.

 

http://electronics.sawfish.ru/softovye-chasy-na-mege-8-ochen-prostye/#more-86

 

 

Posted Image

 

' Пример часов которые отображают часы и минуты на семисегментном

' четырехсимвольном светодиодном индикаторе

' прога для ознакомления, работает 100%

' выставленные фюзы (в понипроге стоят галки на):CKOPT,BOOTSZ1,BOOTSZ0,SUT1,SUT0,CKSEL3,CKSEL1,CKSEL0

' Кварц выдрал из маленького тетриса с часами, думаю также подойдет из любых кварцевых наручных/настенных часов

'насчет точности - терпения больше 2х дней не хватило, идут точно, секунда в секунду.

'e-mail [email protected]

$regfile = "m8def.dat" ' мега8

$crystal = 8000000

Config Portb = Output , Portd = Output ,

Config Pinc.3 = Input 'конфигурируем порты на выход

Portc.5 = 1

Portc.4 = 1

Dim I As Byte , X As Byte , Y As Byte , Temp As Integer , Bn(10) As Byte , Cifri(5) As Integer 'задаем всякие переменные и масивы '

'Dotx As Integer

Restore Dta ' говорим из какой таблици нужно заносить данные в масив

For I = 1 To 10 ' начало цикла

Read Bn(i) ' поочериде заносим ячейки из таблици в масив

Next ' конец цикла

Config Clock = Soft ' конфигурируем совтовые часы

_sec = 0 : _min = 0 : _hour = 0 ' задаем конкретные значения времени, с которого часы будут начинать считать при включении питания

Config Timer0 = Timer , Prescale = 8 ' конфигурируем таймер 0 чтоб потом на него повесить алгоритм отображения цифр

Config Timer1 = Counter , Edge = Falling , Prescale = 1 ' конфигурируем таймер 1 на подсчет импульсов на кварце, припаянного к Xtal1 Xtal2 на 32768 гц БЕЗ КОНДЕРОВ!

On Timer0 Pulse ' назначаем подпрограмму, которая будет запускатся по переполнению 1го таймера

Enable Interrupts 'разрешаем прерывания

Enable Timer0

Config Debounce = 30 'разрешаем таймер0

' начало основного цикла

Do

Debounce Pinc.4 , 0 , Minuti , Sub

Debounce Pinc.5 , 0 , Chasi , Sub

Temp = _hour * 100 ' "складываем" часы с минутами так чтобы получилось 4хзначное число тоесть 8часов+59мин = 859

Temp = Temp + _min

For I = 1 To 4 ' цикл разбиения склеенных часов с минутами на цифры и занесения каждой в таблицу масива

Cifri(i) = Temp Mod 10 ' берем последнюю цифру (9)

If Cifri(i) = 0 Then '

Cifri(i) = 10 '

Goto T '

End If '

Temp = Temp - Cifri(i) ' вычитаем из часов/минут последнюю цифру 859-9=850

T: '

Temp = Temp / 10 ' отбрасываем последний ноль 859/10=85

Next 'возвращаемся к началу цикла и заносим следующюю цифру в масив

' Dotx = _sec Mod 2

Loop 'конец основного цикла

End '

'

Pulse: ' подпрограмма прерываний таймера0

'If Pinc.3 = 0 Then

'Else

Incr X ' увеличиваем х на единицу, для выбора нужных цифр из таблици

Portb = &HFF ' гасим индикатор

Portd = Bn(cifri(x))

Set Portd.2

'If Dotx = 0 Then Reset Portd.2 Else Set Portd.2 ' подаем на индикатор цифру из масива Bn с номером cifri(x)

Y = X - 1 ' считаем какую конкретно цифру, из 4х нужно сейчас зажечь

Reset Portb.y ' зажигаем нужную цифру под номером игрик

If X = 4 Then X = 0 ' обнуляем х при достижении его величины 4

'End If

Return

' возвращаемся на место откуда прервали программу

Dta: ' таблица с данными о цифрах зажигает по порядку : 1234567890

Data &H88 , &HB3 , &HBA , &HD8 , &H7A , &H7B , &HA8 , &HFB , &HFA , &HEB '

 

Minuti:

Incr _min

If _min = 60 Then

_min = 00

Incr _hour

End If

If _hour > 23 Then _hour = 00

_sec = 00

Return

'

Chasi:

Incr _hour

If _hour > 23 Then _hour = 00

Return

Link spre comentariu

Salut yo9hnf!Stii ce ma intriga mai mult?Faptul ca desi am postat softul functional pentru AVR al ceasului propus de tine, nu ai mai spus nimic cu privire la testarea lui!Acum vii cu o alta propunere (tot de ceas), dar facand aceeasi greseala in ceea ce priveste comanda segmentelor!Credeam ca topicul a fost deschis pentru a-i invata si pe altii despre programarea AVR folosind compiler-ul BASCOM si sincer ma asteptam sa ne impartasim unii altora experienta dobandita prin experimentele facute cu soft-ul mentionat, insa constat ca m-am inselat.

Link spre comentariu

Salut yo9hnf!Stii ce ma intriga mai mult?Faptul ca desi am postat softul functional pentru AVR al ceasului propus de tine, nu ai mai spus nimic cu privire la testarea lui!Acum vii cu o alta propunere (tot de ceas), dar facand aceeasi greseala in ceea ce priveste comanda segmentelor!

Va salut !Asa este si imi cer scuze pentru asta ! Mai demult am compilat softul pus de dvs. si tot nu mi-a mers. De atunci m-am luat cu altele si am uitat complet.Aseara am gasit programul rusesc surfand de colo-colo pe net. Recunosc, am uitat complet de ce mi-ati zis dvs. Am compilar iar programul si tot nu merge. Am modificat si tabela...am pus-o pe cea din programul rusesc si tot degeaba.Porturile folosite au fost :-PORTB.0-PORTB.3 - digiti-PORTC.0-PORTC.6 - segmentele-PORTD.0-PORTD.4-butoaneCiudat mi s-a parut faptul ca daca leg un fir care ar fi trebuit sa se duca la digiti, la masa, mi se aprinde afisajul respectiv.
Link spre comentariu

Dar ai dezactivat JTAG din fusebits?este o greseala frecventa!te intreb pentru ca am verificat pe placa de test ambele variante (anod comun si catod comun) si-curios lucru - functioneaza!!!Programul este cel postat in ambele variante.

Link spre comentariu

@nico_2010Initial lasasem uC-ul decat cu SPIEN bifat, deci cu Fuse low : FFh, High : DF .Am bifat si JTAG, si asta rezulta low :FFh, high : 9Fh si tot nu merge.Am setat FUSEBITii si cum erau initial, adica low : E1h, high 99h si tot nimic.

Link spre comentariu

Salut yo9hnf!Te rog listeaza programul EXACT asa cum il ai tu si, de asemenea, fuse bits!Mai am o intrebare: ai dezactivat software "analog comparators"?Este anormal ce se intampla, mai mult ca sigur faci erori!

Link spre comentariu
Salut,Am simulat in ISIS proiectul Voltmetru 25Vmax cu LED si nu functioneaza. A incercat cineva sa realizeze acest proiect sau sa-l simuleze in ISIS?
daca te referi la cel cu atmega 8 ,si 4 digiti ,este functionabil am incercat ca fapt divers,in proteus nu merg toate schemele
Link spre comentariu

daca te referi la cel cu atmega 8 ,si 4 digiti ,este functionabil am incercat ca fapt divers,in proteus nu merg toate schemele

Multumesc pentru raspuns.Eu nu prea am lucrat cu 7segment display. As vrea sa folosesc adc0 pentru a afisa pe 7 segment display cu 8 digiti o valoare. De ex. o valoare cuprinsa -9999.999 si 9999.999 unde referinta 0000.000 ar fi 2,5V. A realizat cineva vreun proiect asemanator?
Link spre comentariu
  • 2 săptămâni mai târziu...

Buna ziua

Are cineva idee cum pot utiliza circuitul D16311GC (datasheet http://www.datasheetcatalog.com/datashe ... -AB6.shtml ) care este o interfata pentru tastatura/display VFD ? De fapt nu prea stiu cum sa incep, datasheet-ul pare destul de convingator insa chiar nu imi dau seama cum trebuie facuta comnicatia seriala cu ATMega 16 si cum sa ii scriu programul (in BASCOM fireste).

Am mai multe astfel de circuite recuperate impreuna cu displayurile VFD din videorecordere si as vrea sa le folosesc (chiar daca unii vor spune ca nu merita, ca lcd-urile sunt foarte ieftine acum bla bla).

Multumesc oricui da o mana de ajutor

 

Mihai

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări