View previous topic :: View next topic |
Author |
Message |
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
|
Back to top |
|
|
O-Family
Joined: 23 May 2010 Posts: 320 Location: Japan
|
Posted: Sat Jul 11, 2020 2:50 am Post subject: |
|
|
Code: |
Dim Ledbuff(4) As Byte 'Dynamic lighting segment data.
Dim Temp1 As Byte
Dim Tempw1 As Word
Dim Tempw2 As Word
Dim Tempw3 As Word
Dim Templ1 As Long
Dim Tempseg1 As Byte 'For segment data storage (1 digit)
Dim Tempseg2 As Byte 'For segment data storage (10 digits)
Dim Tempseg3 As Byte 'For segment data storage (100 digits)
Dim Tempseg4 As Byte 'For segment data storage (1000 digits)
'
' ---------------------------------------------------
' * Subroutine to convert Word value to 4-digit segment value * (Tempw1 -> Ledbuff(1) , Ledbuff(2) , Ledbuff(3) , Ledbuff(4))
' ---------------------------------------------------
'
Longseg: 'For long variables.
Tempw1 = Templ1
Wordseg:
Tempw2 = Tempw1 / 100 'Extract 100's place.
Tempw3 = Tempw2 * 100 'Extract 10s and 1s place.
Tempw3 = Tempw1 - Tempw3
'
Temp1 = Tempw2 'Convert 100's place.
Gosub Binseg 'Converts a binary value into a 2-digit segment code.
Ledbuff(1) = Tempseg2
Ledbuff(2) = Tempseg1
Temp1 = Tempw3 'Converts the place between 10 and 1.
Gosub Binseg 'Converts a binary value into a 2-digit segment code.
Ledbuff(3) = Tempseg2
Ledbuff(4) = Tempseg1
'
If Ledbuff(1) = &B0110_1111 Then 'Is the fourth digit [0]?
Ledbuff(1) = &B0000_0000 'Blank display.
If Ledbuff(2) = &B0110_1111 Then 'Is the third digit [0]?
Ledbuff(2) = &B0000_0000 'Blank display.
If Ledbuff(3) = &B0110_1111 Then 'Is the second digit [0]?
Ledbuff(3) = &B0000_0000 'Blank display.
End If
End If
End If
Return
'
' ---------------------------------------
' * Subroutine to convert binary value to 2 digit segment code *
' --------------------------------------- (Temp1 = Binary data) (Tempseg1 = Lower segment code) (Tempaeg2 = Upper segment code)
'
'
Binseg:
Tempseg2 = Makebcd(temp1) 'Converts a binary value to a BCD (Binary coded decimal) value.
Tempseg1 = Tempseg2 And &H0F 'Get the lower BCD code.
Tempseg1 = Lookup(tempseg1 , Segtab) 'Convert numeric value to segment code.
'
Tempseg2 = Tempseg2 And &HF0 'Get the upper BCD code.
Shift Tempseg2 , Right , 4 'Move down.
Tempseg2 = Lookup(tempseg2 , Segtab) 'Convert numeric value to segment code.
Return
End
'
Segtab:
Data &B0110_1111 '0
Data &B0000_0110 '1
Data &B1010_1011 '2
Data &B1000_1111 '3
Data &B1100_0110 '4
Data &B1100_1101 '5
Data &B1110_1101 '6
Data &B0000_0111 '7
Data &B1110_1111 '8
Data &B1100_1111 '9
|
4-digit LED tachometer
http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/RevCounter/RevCounter.html |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sat Jul 11, 2020 6:34 am Post subject: |
|
|
Hola !! O_Family กก
I was watching your very professional program, what I can say for me is very difficult to understand but I will study calmly and on time.
Now I have read your Bascom manual with Japanese languages but there is no problem I translate them and each instruction I also read and understand.
I repeat I have read your Bascom manual for some time and I like your page.
Hi, let's talk about other topics ok, here is the simple and easy program it is about how to divide by 10 to add to the program.
Code: | Ddrb = 255
Portb = 0
Q1 Alias Portb.0
Q2 Alias Portb.1
Ddrd = 255
Portd = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Timer1 = Timer , Prescale = 256
On Timer1 Presenta
Enable Timer1
Timer1 = 62500
Dim W As Word
Dim Wu As Byte
Dim Wd As Byte
Dim Cnt As Byte
Do
W = Getadc(0)
W = W / 10
If W > 99 Then
W = 99
End If
Gosub Separa
Gosub Presenta
Loop
End
Separa:
Wu = W Mod 10
Wd = W / 10
Return
Presenta:
Timer1 = 62500
If Cnt < 2 Then
Incr Cnt
Else
Cnt = 1
End If
If Cnt = 1 Then
Q1 = 0 : Q2 = 1
Portd = Lookup(wd , Tabla)
End If
If Cnt = 2 Then
Q1 = 1 : Q2 = 0
Portd = Lookup(wu , Tabla)
End If
Return
Tabla:
Data 63
Data 6
Data 91
Data 79
Data 102
Data 109
Data 124
Data 7
Data 127
Data 103
|
For 4 digits I have to do these to control each digit.
Code: | Q1 Alias Portb.0
Q2 Alias Portb.1
Q3 Alias Portb.2
Q4 Alias Portb.3
|
Code: | Dim W As Word
Dim Wu As Word
Dim Wd As Word
Dim Wc As Word
Dim Wm As Word
Dim Cnt As Word
|
Code: | If Cnt < 4 Then
Incr Cnt
Else
Cnt = 1
End If
If Cnt = 1 Then
Q1 = 0 : Q2 = 0 : Q3 = 0 : Q4 = 1
Portd = Lookup(wm , Tabla)
End If
If Cnt = 2 Then
Q1 = 0 : Q2 = 0 : Q3 = 1 : Q4 = 0
Portd = Lookup(wc , Tabla)
End If
If Cnt = 3 Then
Q1 = 0 : Q2 = 1 : Q3 = 0 : Q4 = 0
Portd = Lookup(wd , Tabla)
End If
If Cnt = 4 Then
Q1 = 1 : Q2 = 0 : Q3 = 0 : Q4 = 0
Portd = Lookup(wu , Tabla)
End If
Return
|
Now how do I make these for 4 Digits?
Code: | Do
W = Getadc(0)
W = W / 10
If W > 99 Then
W = 99
End If
Gosub Separa
Gosub Presenta
Loop
End
Separa:
Wu = W Mod 10
Wd = W / 10
|
I have read in help but more information is missing. |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
|
Back to top |
|
|
O-Family
Joined: 23 May 2010 Posts: 320 Location: Japan
|
Posted: Sat Jul 11, 2020 9:30 am Post subject: |
|
|
You can see the result as soon as you use the simulator! |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sat Jul 11, 2020 7:14 pm Post subject: |
|
|
Hello!! O_Family !!
First I made test the ADC simulator does not count "W" nothing is at zero now the Monitor does work well if several ADC values.
This program is very rare 2.0.8.2 you have to update and tell your friend MARK.
[img][/img]
Now the waiting time works, you are also weird the time (100-1000)
Code: | W = Getadc(0)
Print W
Waitms 100
|
We left the topic right now, I'm going to work with the Monitor and I'll tell you in a while. |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sat Jul 11, 2020 9:07 pm Post subject: |
|
|
When I put constant values W=89
Units = 0
Decimals = 89
Code: |
Wu = W Mod 1
Wd = W / 1
Print Wu
Print Wd
|
[img][/img] |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sat Jul 11, 2020 9:13 pm Post subject: |
|
|
When I put constant values 89
Units = 9
Tenths = 8
Code: | Wu = W Mod 10
Wd = W / 10
Print Wu
Print Wd
|
|
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sun Jul 12, 2020 1:20 am Post subject: |
|
|
Do you have to appear vertical numbers like this?
1234
1
2
3
4
Be patient I am studying. |
|
Back to top |
|
|
O-Family
Joined: 23 May 2010 Posts: 320 Location: Japan
|
Posted: Sun Jul 12, 2020 1:28 am Post subject: |
|
|
What doesn't work? |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sun Jul 12, 2020 2:07 am Post subject: |
|
|
Oh sorry if the simulator works, I was testing the external potentiometer. |
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sun Jul 12, 2020 2:12 am Post subject: |
|
|
The simulator if it works 100% you are mistaken since it is not the same. |
|
Back to top |
|
|
O-Family
Joined: 23 May 2010 Posts: 320 Location: Japan
|
Posted: Sun Jul 12, 2020 2:47 am Post subject: |
|
|
I think your math is wrong.
This can be achieved with the following program.
However, as I suggested earlier, it is faster to save flash and faster if you divide the 4-digit number into the 2 high-order digits and the 2 low-order bytes to convert it to a BCD value.
Code: |
Dim W As Word
Dim W1 As Word
Dim W2 As Word
Dim W3 As Word
Dim W4 As Word
W = 1234
W1 = W / 1000 'W1 = 1
W2 = W1 * 1000 'W2 = 1000
W2 = W - W2 'W2 = 234
W2 = W2 / 100 'W2 = 2
W3 = W / 100 'W3 = 12
W3 = W3 * 100 'W3 = 1200
W3 = W - W3 'W3 = 34
W3 = W3 / 10 'W3 = 3
W4 = W / 10 'W4 = 123
W4 = W4 * 10 'W4 = 1230
W4 = W - W4 'W4 = 4
Print W1
Print W2
Print W3
Print W4
Print
Dim Tempstr As String * 5
Dim Tempstr2 As String * 5
Tempstr = Str(w)
Tempstr = Format(tempstr , "0000")
Tempstr2 = Mid(tempstr , 1 , 1)
W1 = Val(tempstr2)
Tempstr2 = Mid(tempstr , 2 , 1)
W2 = Val(tempstr2)
Tempstr2 = Mid(tempstr , 3 , 1)
W3 = Val(tempstr2)
Tempstr2 = Mid(tempstr , 4 , 1)
W4 = Val(tempstr2)
Print W1
Print W2
Print W3
Print W4
End
|
|
|
Back to top |
|
|
Printpix52
Joined: 18 Jun 2014 Posts: 282 Location: D.F.
|
Posted: Sun Jul 12, 2020 3:08 am Post subject: |
|
|
Sorry I'm doing them, you already won them for me, and now I understand what the simulator is for.
[img][/img] |
|
Back to top |
|
|
|