Forum - MCS Electronics

 HX711 Goto page Previous  1, 2
Author Message
odemmo

Joined: 26 Jun 2007
Posts: 19

Posted: Thu Jan 21, 2021 12:59 pm    Post subject:

O-Family wrote:
You can create four types of ports for the program you copied and worked on, and call each of them.
 Code: Hx711_clk Alias Portd.2    Hx711_dat Alias Pind.3    '    '  ******************************************************************************    '  * Subroutine to retrieve A/D data from channel A of HX711 with a gain of 128 *  (Hx711ad = 2's complement format 24bit)    '  ******************************************************************************    ' Hx711get:    Hx711ad = 0    For Hx711count = 23 To 0 Step -1                         'Extract 24-bit data.       Set Hx711_clk                                         'Set the [PD_SCK] pin of the HX711 to [H].       Waitus 1                                              'Period of [H]. (T3 = 1uS)       Hx711ad.hx711count = Hx711_dat                        'Place the data of the [DOUT] pin of HX711 in each bit.       Reset Hx711_clk                                       'Set the [PD_SCK] pin of the HX711 to [L].       Waitus 1                                              'Period of [L]. (T4 = 1uS)    Next Hx711count    '    '  * Send the 25th clock pulse (set channel A and gain to 128 for the next conversion) *    '    Set Hx711_clk                                            'Set the [PD_SCK] pin of the HX711 to [H].    Waitus 1                                                 'Period of [H]. (T3 = 1uS)    Reset Hx711_clk                                          'Set the [PD_SCK] pin of the HX711 to [L].    Waitus 1                                                 'Period of [L]. (T4 = 1uS)    '    If Hx711ad.23 = 1 Then                                   'Is the 24-bit value of A/D a negative value?       Hx711ad = Hx711ad Or &HFF000000                       'Set to a negative value of 32 bits.    End If    Return

Assign 4 types of ports directly to 4 types of subroutines as shown below.
 Code: Hx711get1:    Hx711ad = 0    For Hx711count = 23 To 0 Step -1                         'Extract 24-bit data.       Set Portd.2                                           'Set the [PD_SCK] pin of the HX711 to [H].       Waitus 1                                              'Period of [H]. (T3 = 1uS)       Hx711ad.hx711count = Pind.3                           'Place the data of the [DOUT] pin of HX711 in each bit.       Reset Portd.2                                         'Set the [PD_SCK] pin of the HX711 to [L].       Waitus 1                                              'Period of [L]. (T4 = 1uS)    Next Hx711count    '    '  * Send the 25th clock pulse (set channel A and gain to 128 for the next conversion) *    '    Set Portd.2                                              'Set the [PD_SCK] pin of the HX711 to [H].    Waitus 1                                                 'Period of [H]. (T3 = 1uS)    Reset Portd.2                                            'Set the [PD_SCK] pin of the HX711 to [L].    Waitus 1                                                 'Period of [L]. (T4 = 1uS)    '    If Hx711ad.23 = 1 Then                                   'Is the 24-bit value of A/D a negative value?       Hx711ad = Hx711ad Or &HFF000000                       'Set to a negative value of 32 bits.    End If    Return '--------------------------------------------------------------- Hx711get2:    Hx711ad = 0    For Hx711count = 23 To 0 Step -1                         'Extract 24-bit data.       Set Portd.4                                           'Set the [PD_SCK] pin of the HX711 to [H].       Waitus 1                                              'Period of [H]. (T3 = 1uS)       Hx711ad.hx711count = Pind.5                           'Place the data of the [DOUT] pin of HX711 in each bit.       Reset Portd.4                                         'Set the [PD_SCK] pin of the HX711 to [L].       Waitus 1                                              'Period of [L]. (T4 = 1uS)    Next Hx711count    '    '  * Send the 25th clock pulse (set channel A and gain to 128 for the next conversion) *    '    Set Portd.4                                              'Set the [PD_SCK] pin of the HX711 to [H].    Waitus 1                                                 'Period of [H]. (T3 = 1uS)    Reset Portd.4                                            'Set the [PD_SCK] pin of the HX711 to [L].    Waitus 1                                                 'Period of [L]. (T4 = 1uS)    '    If Hx711ad.23 = 1 Then                                   'Is the 24-bit value of A/D a negative value?       Hx711ad = Hx711ad Or &HFF000000                       'Set to a negative value of 32 bits.    End If    Return '--------------------------------------------------------------- Hx711get3: '--------------------------------------------------------------- Hx711get4:

If your technology makes it difficult to create a complete program, please contact me directly on the bulletin board on my site. (English is also acceptable)

Thanks, but where / how to call up these subroutines?

Oddvar
Duval JP

Joined: 22 Jun 2004
Posts: 997
Location: France

 Posted: Thu Jan 21, 2021 3:10 pm    Post subject: hi, do you know what is a sub ? see the help for Gosub I prefer use call subxxxxx() or using function that is the fondamental of basic language. I did an help about starting with Basic langage in french, if you need it let me your mail JP_________________pleasure to learn, to teach, to create
odemmo

Joined: 26 Jun 2007
Posts: 19

 Posted: Thu Jan 21, 2021 7:33 pm    Post subject: I am aware of Gosub but where in my code should I insert Gosub Hx711get1, Gosub Hx711get2, Gosub Hx711get3 abd Gosub Hx711get4. I am aware of the principle of Basic since the 80's with CBM64 but Bascom Basic is more advanced Basic than what I learned then. I really need this gadget that reads all 4 weights one by one. I speak only Norwegian and google English
albertsm

Joined: 09 Apr 2004
Posts: 5257
Location: Holland

Posted: Thu Jan 21, 2021 8:32 pm    Post subject:

there are multiple solutions.
the most simple would be when you use a full port for example PORTB.
Say portb.0 and portb.1 for the first device, portb.2 and portb.3 for the next, etc.

code becomes :

 Code: For Hx711count = 23 To 0 Step -1                         'Extract 24-bit data.       Set PORTB.0   'clock of first device       SET PORTB.2  'clock of second device       SET PORTB.4       SET PORTB.6         Waitus 1                                              'Period of [H]. (T3 = 1uS)       Hx711ad1.hx711count = PINB.1       Hx711ad2.hx711count = PINB.3       Hx711ad3.hx711count = PINB.5       Hx711ad4.hx711count = PINB.7       Reset PORTB.0       Reset PORTB.2       Reset PORTB.4       Reset PORTB.6       Waitus 1                                              'Period of [L]. (T4 = 1uS)    Next Hx711count

this is just a partial sample to show the idea where you perform the operations on 4 devices at once. this also requires 4 variables to contain the data.
you could also make a sub routine where you pass the bit numbers of the port.

and you can simple copy the code and then assign 4 different ports as the author suggested.

_________________
Mark
albertsm

Joined: 09 Apr 2004
Posts: 5257
Location: Holland

 Posted: Thu Jan 21, 2021 8:35 pm    Post subject: - you should start with the code you have for 1 device. - then show us which pins you have for the other 3 devices._________________Mark
odemmo

Joined: 26 Jun 2007
Posts: 19

O-Family

Joined: 23 May 2010
Posts: 249
Location: Japan

 Posted: Fri Jan 22, 2021 12:11 am    Post subject: If the questioner has a high level of programming, we can also suggest simplifying the program. For example, the [PD_SCK] pin is shared by all four ports and connected to one port, and only the [DOUT] pin is received individually by the four ports. However, since many modifications of the provided test program are required, I proposed a method to make the four easiest subroutines by copying. Even so, the questioner often doesn't understand the BASIC language. You'll have to learn a little more and then ask questions or ask for all the programming. It also does not provide any hardware information such as the power supply voltage (AVDD) for the HX711 load cell or the characteristics of the load cell used.
odemmo

Joined: 26 Jun 2007
Posts: 19

 Posted: Fri Jan 22, 2021 12:29 am    Post subject: Thanks. I understand simple basic programming but this is too complicated for an old man like me and therefore I wants lots of help, help with the whole program is of course invaluable help and thanks. To learn this I think will be very time consuming for a hobby project. Thanks
O-Family

Joined: 23 May 2010
Posts: 249
Location: Japan

 Posted: Fri Jan 22, 2021 1:27 am    Post subject: Yes, I think it takes some effort. The coefficient calculation of the program changes depending on the power supply voltage (AVDD) for the load cell of the HX711 and the characteristics (resistance value and output voltage) of the load cell. Also, for each of the four load cells, error adjustment and zero adjustment are required, so simply speaking, the program is quadrupled. It corresponds to the idea of measuring with four separate AVR circuits and summarizing the four results obtained. Simply asking only the subroutine part of a program can be difficult to solve if you don't know how the entire program works. It may take some time, but do your best!
odemmo

Joined: 26 Jun 2007
Posts: 19

albertsm

Joined: 09 Apr 2004
Posts: 5257
Location: Holland

Posted: Wed Jan 27, 2021 10:15 am    Post subject:

hi

you should use the CODE tags when posting code like this :

Also use the Proper Indent feature so you get automatic indention.
In your code i replaced main: goto main with a Do Loop
And the do loop until with a BITWAIT which is the equivalent.

Your code still uses 1 sensor but when it works as you want it is indeed a matter of copy & paste.
One important thing however : it is always a good idea to invest some time in what the end goal is. It is like making an IKEA furniture : best read all the pages before you start.

Now you have something working you can probably also better understand the commands better and you are able to use one of the methods to enhance with multiple sensors.
- simple copy & rename
- do all the 4 sensors at the same time
- make a sub routine and pass info like the bit number.

for example you have 2 bits you use. these you could pass :

 Code: declare function Something(byval sensorpin0 as byte, byval sensorpin1 as byte) as word 'or what ever you return 'call it like this myword1=Something(0,1) myword2=Something(2,3) and in the sub you have a reference to the pin number : function Something(byval sensorpin0 as byte, byval sensorpin1 as byte) as word 'or what ever you return    portd.sensorpin0 = 0 'for example end function

you best make a small example without the other code and look in the simulator how it will work.

_________________
Mark
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First
 All times are GMT + 1 HourGoto page Previous  1, 2 Page 2 of 2

 Jump to: Select a forum BASCOM AVR/8051----------------BASCOM-AVRBASCOM-8051BASCOM-ARDUINOShare your working BASCOM-8051 code hereShare your working BASCOM-AVR code hereBASCOM BETA-SLA BASCOM Related----------------EASY TCP/IPAVR-DOSAR7212KokkeKat FAT-free SD card libBASCOM Project Blog Other Stuff----------------VariousPCB'sRoboticsNew WebSiteAnnouncementsAVR Archive----------------BASCOM-AVR ArchiveBASCOM-8051 ArchiveBASCOM-AVR Unsupported versionsEasy TCP/IP ArchiveBASCOM-EDB
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum