BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Конвертиране на uint8 към hex
TrustHavic
Публикувано на: 18-09-2018, 13:14
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 384
Регистриран на: 30.04.14



Здравейте,
Налага ми се да работя с W5500 (чип за връзка с интернет), към платка Wiz550io и PIC18F26K80.

Написах нещо като библиотека, за първоначални тестове, обаче имам проблем с прехвърляне на данни от RX към TX буфера(нещо дори като ехо).
Става въпрос за Master/Slave Modbus TCP, като правя slave устройството.

При четене от RX буфера го правя така:
CODE

//получена информация, брой байтове
uint16_t RX_RSR = rx_RSR();
// RX Read Pointer начало
uint16_t RX_RP = rx_ptrRead();
// изчиствам буфера
for( int i = 0; i < 30; i++) {
   tx_buff[i] = 0;
}
//започвам да го пълня с постъпилата информация
for(uint16_t i = 0; i < RX_RSR; i++) {
   tx_buff[i] = W5500_Read_Reg(RX_RP+i, 24);
}

//ако има информация я изпращам към TX буфера      
if(RX_RSR > 0){
   send_uint8_hex_to_uart1(RX_RSR);
   w5500_send_tx(RX_RSR, tx_buff);
}

//Премествам read pointer-а с толкова, колкото информация съм получил      
RX_RP = RX_RP + RX_RSR;
W5500_Write_Reg(Sn_RX_RD0, 12, RX_RP >> 8);
W5500_Write_Reg(Sn_RX_RD1, 12, RX_RP);
W5500_Write_Reg(Sn_CR, 12, Sn_CR_RECV);

Тази функция я заварих в съществуващия проект и работи много добре, но праща информация само по сериен порт, за дебъг
send_uint8_hex_to_uart1
А другата функция
w5500_send_tx, работи идентично
CODE

void w5500_send(uint16_t len, uint16_t *buff[]){
/* TX Write Pointer */
uint16_t TX_WP = tx_ptrWrite();
for(int i = 0; i < len; i++){
    W5500_Write_Reg(TX_WP+i, 20, buff[i]);
     send_uint8_hex_to_uart1(buff[i]);
}
       TX_WP = TX_WP+len;
       W5500_Write_Reg(Sn_TX_WR0, 12, TX_WP >> 8);
       W5500_Write_Reg(Sn_TX_WR1, 12, TX_WP);
       W5500_Write_Reg(Sn_CR,     12, Sn_CR_SEND);
}


При дебъг-а каквото е на входа такова е и на изхода, ОБАЧЕ в master-a получвам коренно различни глупости:

При правилна работя трябва да изпратя:
00 01 00 00 00 06 01 01 00 64 00 01
И да получа
00 01 00 00 00 06 01 01 00 64 00 01, докато аз получава:
0A 56 C6 E4 DD A9 73 70 84 ,


на какво може да се дължи това странно поведение, и дали конвертирането би помогнало?

Това мнение е било редактирано от TrustHavic на 18-09-2018, 13:14
PMEmail Poster
Top
Дон Реба
Публикувано на: 18-09-2018, 13:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7125
Регистриран на: 11.11.06



като стане нещо такова, фащам осцилоскопа и гледам какво РЕАЛНО фърка по жицата
PM
Top
TrustHavic
Публикувано на: 18-09-2018, 13:21
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 384
Регистриран на: 30.04.14



QUOTE (Дон Реба @ 18-09-2018, 13:17)
като стане нещо такова, фащам осцилоскопа и гледам какво РЕАЛНО фърка по жицата

Къде да го вържа - между pic-a и ethernet чипа ли? Двете си комуникират чрез SPI, там ли да гледам>
PMEmail Poster
Top
Дон Реба
Публикувано на: 18-09-2018, 13:45
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7125
Регистриран на: 11.11.06



ми да, щом там праща
PM
Top
TrustHavic
Публикувано на: 18-09-2018, 13:56
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 384
Регистриран на: 30.04.14



Тей де, ще трябва да видя къде има осцилоскоп, но каква е вероятността да е софутерна грешка или нещо свързано с различните типове данни?
PMEmail Poster
Top
Дон Реба
Публикувано на: 18-09-2018, 14:05
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7125
Регистриран на: 11.11.06



100% е софтуерна грешка, осцилоскопа е само за дебъг icon_smile.gif
PM
Top
bvbfan
Публикувано на: 18-09-2018, 14:07
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2891
Регистриран на: 08.12.13



uint16_t *buff[] -> Двоен указател, пробвай с uint16_t *buff


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 18-09-2018, 14:23
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1287
Регистриран на: 21.02.18



QUOTE (bvbfan @ 18-09-2018, 14:07)
uint16_t *buff[] -> Двоен указател, пробвай с uint16_t *buff

цццц, кога ще се научите http://www.harbaum.org/till/nanovm/index.shtml


--------------------
Напред! Живота е сраженье! Напред! И прав всегда ходи!
Напред, макар към поражение! Ако ще паднеш, прав падни!
---
Raw, and untamed in spirit, We chew this world and Spit it out
---
Challenge my own world to chaos
---
“I overcame myself, the sufferer; I carried my own ashes to the mountains; I invented a brighter flame for myself.”
PMEmail PosterUsers Website
Top
Дон Реба
Публикувано на: 18-09-2018, 14:41
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7125
Регистриран на: 11.11.06



QUOTE (bvbfan @ 18-09-2018, 14:07)
uint16_t *buff[] -> Двоен указател, пробвай с uint16_t *buff

аз тва квадратни скоби в аргумент никога не съм го разбирал, но пък интересно че той твърди че send_uint8_hex_to_uart1(buff[i]); бачка
PM
Top
ici
Публикувано на: 18-09-2018, 15:50
Quote Post


Group Icon
Име: Ивайло Илчев ики
Група: VIP
Ранг: Почетен член

Мнения: 15669
Регистриран на: 06.06.04



QUOTE (TrustHavic @ 18-09-2018, 14:14)
При правилна работя трябва да изпратя:
00 01 00 00 00 06 01 01 00 64 00 01
И да получа
00 01 00 00 00 06 01 01 00 64 00 01, докато аз получава:
0A 56 C6 E4 DD A9 73 70 84 ,

Прилича на фраминг еррорс. Бодрейта се разминава, може да правено за друг кварц или някой прескалер да е зареден неправилно.


--------------------
Reading undefined locations provides undefined data.
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0