Hi Bill,
I applied the suggestion of Kiste in one of my programs. Here is a part of that
program. This is for a PIC running at 48 MHz target clock.
I had to look up a specific baudrate to see if it was valid. If so I set the
new baudrate.
You see 4 parts (not all needed)
1. Define valid bauddrates. You could skip this
2. Check if a given baudrate is valid. You could skip this too.
3. The baudrate calculation based on the given baudrate + initialize the
USART. You need this. Note: baudrate calculation is of type dword.
4. The intiallization routine of the USART with the calculation. You need
this.
; List of baudrates supported. See page 262 of the datasheet.
; Formula for baudrate calclation for 8 byte asynchronous mode
; with for sync = FALSE and brg16 = TRUE and brgh = FALSE:
; brg = target_clock/(baudrate * 16) - 1
const dword SUPPORTED_BAUDRATES[] = {
110, 300, 600, 1200, 2400, 4800, 9600, 14400,
19200, 28800, 38400, 57600, 115200, 230400
}
; Check if the given baudrate is supported and return TRUE if so.
function supported_baudrate(dword in baudrate) return bit is
var byte index
var bit found = FALSE
for count(SUPPORTED_BAUDRATES) using index loop
if (SUPPORTED_BAUDRATES[index] == baudrate) then
found = TRUE
end if
end loop
return found
end function
baudrate_calculation = (target_clock/(current_baudrate * 16)) - 1
usart_init(word(baudrate_calculation))
; Initialize the USART with the given baudrate value. The USART is enabled.
procedure usart_init(word in baudrate_value) Is
usart_disable()
; Use 16 bit baudrate generator and set baudrate
BAUDCON = 0b0000_1000
SPBRG = baudrate_value
;Initialise transmitter, 8 bits, asynchronous mode, low speed.
TXSTA = 0b0000_0000
; Initialise receiver and serial port, 8 bits
RCSTA = 0b1000_0000
usart_enable()
end procedure
Hope this helps.
Kind regards,
Rob
________________________________
Van: [email protected] <[email protected]> namens Bill Beek
<[email protected]>
Verzonden: maandag 17 oktober 2022 19:40
Aan: jallib <[email protected]>
Onderwerp: Re: [jallib] Baudrate control
Thanks Kiste for your reply. My teacher said more than 50 years ago that poking
in memory was not a good way of programming,
but I did think that this was also a possibility. If this turns out to be the
only possibility,
I'm not sure how to go about it I don't see anything in the documentation
about writing directly in the PIC memory
except that you can use assembler instructions. Unfortunately I am not well
informed about the PIC asm code.
A long time ago I programmed various micro processors.
I would like to hear if you want to share a piece of code what i can alter for
my needs.
Thanks in advance, Bill.
On Monday, October 17, 2022 at 4:47:20 PM UTC+2 Kiste wrote:
Hi Bill,
I've used different baud rates, but I did not modify the serial libraries for
that. I just calculated the register values by hand and poked the different
values to the different registers. The baud rate calculation in the libraries
is not a thing which is good to be done at runtime. For certain baud rates, the
lib will refuse to compile and inform you, that your desired baud rate cannot
be set due to a deviation from the desired value which is to large to reliably
work. That can't be done at runtime for a start.
Greets,
Kiste
Am Montag, 17. Oktober 2022, 15:39:54 MESZ hat Bill Beek <[email protected]>
Folgendes geschrieben:
Hello everyone, Is there anyone who has a solution to my problem. I am working
on a serial LCD now that I have this working, I want to select the baud rate
before running the program. Unfortunately, the "const serial_hw_baudate" do not
easily change. In the library "usart_common" I changed all the constants in a
variable "var dword" but I keep getting error messages from this lib. Maybe I'm
overlooking something, or is there a simple method to set the Baud rate under
software control.
Kind regards, Bill
--
You received this message because you are subscribed to the Google Groups
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jallib/2b1be8c6-547c-4f0c-97bb-43fc851e4bf4n%40googlegroups.com<https://groups.google.com/d/msgid/jallib/2b1be8c6-547c-4f0c-97bb-43fc851e4bf4n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jallib/81855104-44d2-4941-b199-807927d341dan%40googlegroups.com<https://groups.google.com/d/msgid/jallib/81855104-44d2-4941-b199-807927d341dan%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jallib/GVXP195MB16378B36E4F4C0B9DF48875AE6299%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM.