the assembly program for the microcontroller is created by a classmate. he based the protocol for the serial program from a protocol he found in the internet. unfortunately, i can't find the fpdf file, guess i'll just ask him later when he comes back.
On 13 Mar 2005 03:28:43 -0800, John Machin <[EMAIL PROTECTED]> wrote: > > jrlen balane wrote: > > the hardware is a school project that uses a microcontroller for > "light dimming" > > the message command "67" will tell the microcontroller (PIC16F877) to > > do a command (to control the intensity of a lamp) > > the message command "70" should tell the GUI that the microcontroller > > has started transmitting. > > the message sent by the GUI is different from the message sent by the > > microcontroller > > (but i guess sir John is right, i think i should use different > > variable for the data transmitted and data received) > > i am currently developing this part of the project which implements > > the serial communication > > i've fixed the command and total_data since i know beforehand that > > this will be its value. > > to simplify the program, i have also fixed the message_no since the > > microcontroller will still accept the transmitted data as long as the > > checksum == 0. > > (1) But it's NOT zero after the first time around! (2) How do you know > what it will accept? Guessing or reading the manual? If the checksum is > not zero, then what happens? Please quote the exact section from the > manual. > > > > > anymore suggestion???... > > YES: show the whole program; you have left out the initialisation part. > > > ================================================== > > command = 67 > > message_no = 1 > > total_data = 2 > > item=10000 > > for item in range(10000, 30001, 250): > > ser.open() > > data_hi, data_lo = divmod(item, 0x100) > > checksum = -(data_hi + data_lo + 0x46) & 0xff > > ser.write(pack('6B', command, message_no, total_data, data_lo, > > data_hi, checksum)) > > data = ser.read(10) > > (command, msg_no, no_databyte, temp1, temp2, pyra1, pyra2, > > voltage, current, checksum) = unpack('10B', data) #serial receive > > protocol > > print command, msg_no, no_databyte, temp1, temp2, pyra1, pyra2, > > voltage, current, checksum > > ser.flushInput() > > ser.close() > > > > =================================== > > i've rewritten the code and deleted some unnecessary entries, now the > > problem is : > > 21 6 64 64 192 0 0 0 175 70 > > 70 2 6 64 64 192 0 0 0 114 > > 70 11 6 64 64 192 0 0 0 105 > > 0 0 104 70 2 6 64 64 192 0 > > 70 2 6 64 64 192 0 0 0 114 > > 128 128 103 70 2 6 64 64 192 0 > > 70 2 6 64 64 192 0 0 0 114 > > 16 208 246 70 2 6 64 64 192 0 > > 70 2 6 64 64 192 0 0 0 114 > > > > =================================== > > the received data does not always start with the command "70", > > is this ok??? since i can always search first for the command "70" > > before i read the remaining 9 bytes, then calculate first for the > > checksum before finally accepting the received data. > > > > am i making sense here?! please help me... > > As Dennis has told you, searching is pointless. You are losing data > now. Before you weren't losing data. Until you fix that problem, > fiddling with anything else is pointless. You have stopped doing > sleep() -- why? You are now doing ser.open() and ser.flushInput() and > ser.close() on *each* time around the loop -- why? I'd strongly suggest > you put these back the way they were. THEN do what I told you to do: > use a separate tx_command and rx_command. The first time through the > loop, command is set to 70 from the received data, and then the second > time around, you SEND 70, not 67!!! Fix that, and then show us what you > get. DON'T try searching for a 70. Don't thrash around trying multiple > changes at once -- make changes one at a time so you can see the > effects. > > Do you have a part number for the manual which describes the 67 and 70 > "commands" and the check-sum? Is the manual on the internet anywhere? > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list