avatar_elektro77

Bu kodları hex e çevirmek istiyorum.

Başlatan elektro77, 25 Temmuz 2024, 12:30:47

elektro77

Ağaşıdaki kodlar C dilinde yazılmıştır ama hangi modelinde yazıldığını bilmiyorum.
Aşağıdaki linkte tasarımcısı tarafından açık kaynak kod olarak paylaşılmış.
https://www.engineersgarage.com/portable-uart-data-receiver-tester/
Fakat linke hex kodu olarak yüklememişler.
Linkteki devreyi yapmak istiyorum.
C dili ile pek ilgilenmedim. Sadece biraz aşinayım. Arduino ve PİC-C derleyicilerinde derlemeyi denedim ama çok hata verdi. Yada ben derlemeyi başaramadım.
Sonuç olarak aşağıdaki kodları hex koduna çevirip buraya ekleyebilirseniz çok sevinirim.
//Program to
/*
filename : SerialDataTester.C
author : fhn
Dtd : 22-mar-2018
MCU : ATmega8 (A) @ 11.0592 MHz
display ; LCD 4 rows X 20 columns
others: menu driven
buttons : 6
*/
 
#define F_CPU 11059200L
#define F_CPU_BY_100  F_CPU/100
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
 
#define UMS 500  
#define LCD_P PORTC
#define LCD_EN   0b00010000 
#define LCD_RS   0b00100000  
#define BTN_SW6 0b00100000 
#define BTN_SW1 0b00000001 
#define BTN_SWS 0b00011110 
#define BTN_SW5 0b00010000 
#define BTN_SW4 0b00001000 
#define BTN_SW3 0b00000100 
#define BTN_SW2 0b00000010  
#define TX_L 0b00000100  
#define TX_C 0b00001000  
#define BLK 0b10000000  
 
//=============================================================================
 
unsigned char URD[UMS+1];
char USD[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
char HEX[16] = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F'};
int UBRL[12]={ 3, 6, 12, 24, 48, 96, 144, 192, 288, 384, 576, 768}; // X 100
uint8_t U_B=5;
uint8_t U_D=8;
uint8_t U_P=1;
uint8_t U_S=1;
unsigned char USART_RXD=0;
int URDP = 0;
int USDP = 0;
uint8_t USCH = 1;
uint8_t VCCH = 1;
 
//=============================================================================
 
void getString ( long val, char *str, char fc, int width ) 
{
long v=val,i=0;
int nst=0, p=0;
long hvl=1;
for ( int w=0; w<width; w++ )
hvl *= 10;
v = v % (hvl);
for ( i=hvl/10; i>=1 ; i=i/10 )
{
if( (v/i)>=1 && nst==0 )
nst = 1;
if ( nst==1 )
{
str[p++] = (v/i) + '0';
}
else
{
str[p++] = fc; 
}
v = v%i;
}
 
str[p]=0;
if (str[p-1]==' ')
{ str[p-1]='0'; }
}
 
//=============================================================================
 
void rdE ( )
{
int rval = 0;
rval = eeprom_read_byte ( (void *)1); 
if ( rval<1 || rval>2 )
return;
U_S = rval;
rval = eeprom_read_byte ( (void *)2);
if ( rval<0 || rval>2 )
return;
U_P = rval;
rval = eeprom_read_byte ( (void *)3); 
if ( rval<5 || rval>8 )
return;
U_D = rval;
rval = eeprom_read_byte ( (void *)4); 
if ( rval<0 || rval>13 )
return;
U_B = rval;
}
 
//=============================================================================
 
void wrE ( )
{
eeprom_write_byte ( (void *)1, U_S); 
_delay_ms(10);
eeprom_write_byte ( (void *)2, U_P ); 
_delay_ms(10);
eeprom_write_byte ( (void *)3, U_D); 
_delay_ms(10);
eeprom_write_byte ( (void *)4, U_B);; 
_delay_ms(10);
}
 
//=============================================================================
 
void P_init ( ) 
{
DDRB = 0x00;
DDRC = 0xFF;
DDRD = 0xFE;
PORTD &= (~TX_C);
PORTD &= (~TX_L);
LCD_P &= (~LCD_RS);
LCD_P &= (~LCD_EN ); 
}
 
//=============================================================================
 
void LCD_E ( )
{
LCD_P |= LCD_EN; 
_delay_us(10);
   LCD_P &= (~LCD_EN ); 
   _delay_us(15);
}
 
//=============================================================================
 
void LCD_WN ( unsigned char nibl , unsigned char RS)
{
LCD_P &= 0xF0;  
_delay_us(5);
if ( nibl > 0b00001111)
LCD_P |= ( (nibl>>4) & 0x0F);   
else
LCD_P |= (nibl & 0x0F); 
if (RS)
LCD_P |= LCD_RS;
else
LCD_P &= (~LCD_RS);
LCD_E ( );
}
 
//=============================================================================
 
void LCD_WCM ( unsigned char cmd )
{
LCD_WN ( cmd & 0xF0 , 0);
LCD_WN ( cmd & 0x0F , 0);
_delay_us(2);
}
 
//=============================================================================
 
void LCD_init(  )
{
unsigned char initval = 0x20; 
_delay_ms ( 50 ); 
LCD_WN  ( 0x30 , 0);
_delay_ms ( 20 );
LCD_WN ( 0x30 , 0);
_delay_us ( 200 ); 
LCD_WN  ( 0x30 , 0);
_delay_ms ( 100 );
LCD_WN  ( 0x20 , 0 );
_delay_ms ( 25 );
initval |= 0b00001000;  
initval |= 0b00000100;  
LCD_WCM ( initval ); 
_delay_ms ( 25 );
LCD_WCM ( 0x0C ); 
_delay_ms ( 25 );
LCD_WCM ( 0x06 ); 
_delay_ms ( 250 );
}
 
//=============================================================================
 
void LCD_WC ( unsigned char c )
{
LCD_WN ( c & 0xF0 , 1);
LCD_WN ( c & 0x0F , 1);
_delay_us(1);
}
 
//=================================================
 
void LCD_WS ( char s[] )
{
for (int i=0; s[i]!=0; i++)
{
LCD_WC ( s[i] );
_delay_us ( 5 ); 
}
}
 
//=============================================================================
 
void LCD_CS ( )
{
LCD_WCM ( 0x01 );
_delay_ms(3);
}
 
//=================================================
 
void LCD_POS ( unsigned char R, unsigned char C )
{
switch (R)
{
case 3: LCD_WCM ( 0x94 + C-1 );  break;
case 4: LCD_WCM ( 0xD4 + C-1  ); break;
case 2: LCD_WCM ( 0xC0 + C-1 ); break;
case 1:
default: LCD_WCM ( 0x80 + C-1 ); break;
}
_delay_ms ( 3 );
}
 
//=============================================================================
 
int USART_init ( int bd, int db, int prt, int stb)
{
int ubrr = 0;
int bd_rate=bd;  
unsigned int ucsrc = (1<<URSEL);
ubrr   = (int)( F_CPU_BY_100 / (8*bd_rate) ) -1;
UCSRA |= (1<<U2X); 
if (ubrr>=0)
{
UBRRL = ubrr;
UBRRH = (ubrr>>8);
}
else
return (-1);
UCSRB = (1<<RXEN) | (1<<TXEN); 
UCSRB |= (1 << RXCIE);       
switch ( db )
{
case 5: break;
case 6: ucsrc |= (1<<UCSZ0); break;
case 7: ucsrc |= (2<<UCSZ0); break;
case 8: ucsrc |= (3<<UCSZ0); break;
default:  return (-1);
}
if (stb==2)  
ucsrc |= (1<<USBS);
if (prt==2) 
ucsrc |= (1<<UPM1);
if (prt==1) 
ucsrc |= (1<<UPM1) | (1<<UPM0);
UCSRC = ucsrc;  
return ( 0 );
}  
 
//=============================================================================
 
char USART_SC ( unsigned char ch )
{
while ( ! (UCSRA & (1<<UDRE) ) ) 
{
_delay_us ( 1 ); 
}
UDR = ch;
return ( 0 );
}
 
//=============================================================================
 
void USART_SM (  )
{
char str[10];
LCD_CS ( );
LCD_POS ( 1,1 );
LCD_WS ( "BaudRate : ");
LCD_POS ( 1,12 ); 
getString(UBRL[U_B], str,' ', 3); 
LCD_WS ( str ); LCD_WS ( "00" );
LCD_POS ( 2,1 ); 
LCD_WS ( "DataBits : "); 
LCD_POS ( 2,12 );
LCD_WC ( U_D+'0');
LCD_POS ( 3,1 );
LCD_WS ( "Parity   :  " );
LCD_POS ( 3,12 );
switch( U_P )
{
case 1: LCD_WS ( "ODD " );  break;
case 2: LCD_WS ( "EVEN" );  break;
default:LCD_WS ( "NONE" );  break;
}
LCD_POS ( 4,1 );
LCD_WS ( "StopBits :  " );
LCD_POS ( 4,12 );
LCD_WC ( U_S+'0');
LCD_POS ( 1,12 );
}
 
//=============================================================================
 
ISR ( USART_RXC_vect )
{
USART_RXD = UDR;  
if ( URDP < UMS )
{
URD[URDP++] = USART_RXD;
}
 }
 
//=============================================================================
 
void VUSCR ( )
{
char str[10];
LCD_CS ( );
if ( URDP<=0)
{
LCD_POS (2,1);
LCD_WS ( "NO DATA or" );
LCD_POS (3,1);
LCD_WS ( "BUFFER EMPTY" );
return;
}
for ( int i=0; i<4 && URDP>(USDP+i); i++ )
{
LCD_POS ( i+1 , 1 );
LCD_WC ( '@' );
getString(USDP+i, str,'0',3); 
LCD_WS ( str ); 
LCD_WS ( "= " );
if ( URD[USDP+i]<32 ||
URD[USDP+i]>126 )
LCD_WC ( '.' );
else 
LCD_WC ( URD[USDP+i] );
LCD_WC ( ' ' );
LCD_WC ( HEX[URD[USDP+i]/16] ); 
LCD_WC ( HEX[URD[USDP+i]%16] ); 
LCD_WS ( "h " ); 
getString(URD[USDP+i], str,'0',3); 
LCD_WS ( str ); 
LCD_WS ( "d " );
int n = URD[USDP+i];
LCD_WC ( n/64 + '0' ); 
n = n%64;
LCD_WC ( n/8 + '0' ); 
LCD_WC ( n%8 + '0' ); 
}
LCD_POS(4,1);
LCD_WC ( '[' );
getString(URDP, str,'0', 3); 
LCD_WS ( str ); 
LCD_WC ( ']' );
}
 
//=============================================================================
 
void USART_UPD ( )
{
USART_init ( UBRL[U_B],
U_D,
U_P,
U_S );
URDP=0;
USDP = 0;
VCCH = 1;
wrE ( );
rdE ( );
}
 
//=============================================================================
 
void USART_SD ( )  
{
LCD_CS ( );
PORTD |= BLK;
LCD_POS (1,1);
LCD_WS ( "SENDING.... " );
PORTD |= TX_C;
PORTD |= TX_L;
_delay_ms(10);
LCD_POS ( 2,1 );
for ( int i=0; USD[i]!=0 ;i++)
{
if ( i==18 )
LCD_POS ( 3,1 );
LCD_WC ( USD[i] );
USART_SC (  USD[i] );
_delay_ms(1);
}
_delay_ms(50);
PORTD &= (~TX_C);
LCD_POS (4,1);
LCD_WS ( "SENT (Check LSB)" );
_delay_ms(50);
PORTD &= (~TX_L);
_delay_ms(1500);
VCCH = 1;
}
 
//=============================================================================
 
void USART_MN ( )
{
uint8_t wtl = 100;
uint8_t btn_sws = 0;
uint8_t editpos = 0;
char str[10];
uint8_t sU_B = U_B;
uint8_t sU_D = U_D;
uint8_t sU_P = U_P;
uint8_t sU_S = U_S;
USART_SM (  );
_delay_ms ( 300 );
LCD_WCM ( 0x0F ); 
while ( wtl > 0)
{
PORTD ^= BLK;
LCD_POS (editpos+1,12);
btn_sws = PINB & BTN_SWS;
if ( btn_sws != BTN_SWS)
{
wtl = 100;
_delay_ms ( 300 );
if ( ( btn_sws & BTN_SW4 ) ==0 )
{
editpos++;
if (editpos>3)
editpos = 0;
_delay_ms ( 300 );
}
else if ( ( btn_sws & BTN_SW5 ) ==0 )
{
switch (editpos)
{
case 0:
sU_B++;
if (sU_B>11)
sU_B=0;
LCD_POS ( 1,12 ); 
getString(UBRL[sU_B], str, ' ', 3); 
LCD_WS ( str ); LCD_WS ( "00" );
break;
case 1:
sU_D ++;
if ( sU_D>8)
sU_D=5;
LCD_POS ( 2,12 );
LCD_WC ( sU_D +'0' );
break;
case 2:
sU_P++;
if ( sU_P>2)
sU_P=0;
LCD_POS ( 3,12 );
switch( sU_P )
{
case 1: LCD_WS ( "ODD " ); break;
case 2: LCD_WS ( "EVEN" ); break;
default:LCD_WS ( "NONE" ); break;
}
break;
case 3:
sU_S ++;
if ( sU_S>2)
sU_S=1;
LCD_POS ( 4,12 );
LCD_WC ( sU_S +'0' );
break;
default:
break;
}
}
else if ( ( btn_sws & BTN_SW3 ) ==0 )
{
U_B = sU_B;
U_D = sU_D;
U_P = sU_P;
U_S = sU_S;
USCH = 1;
USART_SM (  );
LCD_POS ( 4,15 );
LCD_WS ( "SAVED" );
_delay_ms ( 2000 );
return;
}
else if ( ( btn_sws & BTN_SW2 ) ==0 )
{
U_B = 5;
U_D = 8;
U_P = 1;
U_S = 1;
USCH = 1;
USART_SM (  );
LCD_POS ( 4,15 );
LCD_WS ( "RESET" );
_delay_ms ( 2000 );
return;
}
}
else
{
wtl--;
}
if ( ( PINB & BTN_SW6 ) == 0 )
{
wtl = 0;
_delay_ms ( 300 );
}
_delay_ms ( 100 );
}
VCCH = 1;
}
 
//=============================================================================
 
void VWL ( ) 
{
int btn_sws = 0;
PORTD ^= BLK;
btn_sws = PINB & BTN_SWS;
if (( btn_sws & BTN_SW2 ) == 0 )
{
URDP=0;
USDP = 0;
VCCH = 1;
_delay_ms ( 100 );
}
else if ( ( btn_sws & BTN_SW4 ) == 0 )
{
USDP += 3;
if ( USDP>=URDP)
USDP = URDP-1;
VCCH = 1;
_delay_ms ( 100 );
}
else if ( ( btn_sws & BTN_SW5 ) == 0 )
{
USDP -= 3;
if ( USDP<0)
USDP = 0;
VCCH = 1;
_delay_ms ( 100 );
}
else if ( ( btn_sws & BTN_SW3 ) == 0 )
{
USDP = 0;
VCCH = 1;
_delay_ms ( 100 );
}
}
 
//=============================================================================
 
int main ( )
{
int isMenuPressed = 0;
int usart_recd_data_pos = -1;
P_init ( );
PORTD |= BLK;
PORTD |= TX_L;
_delay_ms ( 2000 );
PORTD &= ~BLK;
PORTD &= (~TX_L);
LCD_init(  );
LCD_CS ( );
LCD_POS (1,1);
LCD_WS ( " SERIAL DATA TESTER ");
LCD_POS (2,1);
LCD_WS ( "====================");
LCD_POS (3,1);
LCD_WS ( "for USART & MAX485  ");
LCD_POS (4,1);
LCD_WS ( "      communications");
_delay_ms ( 3000 );
rdE ( );
_delay_ms ( 100 );
USART_SM (  );
USCH = 1;
VCCH = 1;
sei();
_delay_ms ( 2000 ); 
while ( 1 )
{
PORTD ^= BLK;
if (usart_recd_data_pos != URDP)
VCCH = 1;
usart_recd_data_pos = URDP;
if ( USCH )
USART_UPD ( );
if ( VCCH )
{
VUSCR ( );
_delay_ms ( 200 );
}
isMenuPressed = 0;
USCH = 0;
VCCH = 0;
_delay_ms ( 50 ); 
if ( ( PINB & BTN_SW1 ) == 0 )
USART_SD ( ); 
if ( ( PINB & BTN_SW6 ) == 0 )
isMenuPressed = 1;
if ( isMenuPressed )
{
USART_MN ( );
LCD_WCM ( 0x0C ); 
}
else
VWL ( );
}
return 0;
}
 
//=============================================================================
 
###
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Linke bir açıklama vermiş yazarı,
Alıntı YapThis device is based on AVR ATmega8 and it is programmed with embedded C using AVR Studio 4. Other programming tools like Atmel Studio or Notepad++ can also be used to write and compile the code.

Bu açıklamaya bakarak ya AVR Studio yada Atmel Studio veya Notepad++ gibi arayüzler kullanılarak derlenebilir demiş ama Embedded C diye bir derleyicinde olması gerekecek sanırım.

Yada en iyisi yazarından HEX disyasını istemek olur sanırım.

Ete

elektro77

Alıntı yapılan: ete - 25 Temmuz 2024, 14:15:38Linke bir açıklama vermiş yazarı,
Bu açıklamaya bakarak ya AVR Studio yada Atmel Studio veya Notepad++ gibi arayüzler kullanılarak derlenebilir demiş ama Embedded C diye bir derleyicinde olması gerekecek sanırım.

Yada en iyisi yazarından HEX disyasını istemek olur sanırım.

Ete
Tasarımın youtube linkinde yorum yaparak hex dosyasını dün istedim ama cevap gelmedi henüz.
Proje, youtube a konulalı 5 sene olmuş. Cevap geleceğinden emin değilim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

parametre

#3
https://disk.yandex.com.tr/d/rejAGg_xp6uLSQ

İşinizi gorurmu aceba alıntıdır
Uart İletişimi Dinleyip Bilgisayara Nasıl Aktarabilirim? Konusundan Mehmetten
Pic proje. Orgdan alıntıdır

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

parametre

#5
.........

Powered by EzPortal