Hallo iedereen,
Om de veiligheid had ik geen idee waar ik die zou plaatsen mijn onderwerp. Het handelt over deels hardwware ontwerp en microcontroller gebaseerd ontwerp vandaar denk bij schoolvragen is beste.
Wat is nu mijn probleem:
Ik heb een ontwerp gemaakt waarin een IC (TDA7300) moet geprogrammeert worden.
De communicatie voor het sturen van de commando's doe ik samen met een microcontroller. De datacommunicatie van de microcontroller naar de slave (TDA7300) heb ik opgelost met I2C.
Er is ook een mogelijkheid voorzien om de informatie naar de UART te sturen en zo naar mijn laptop waar ik een programma moet zien te draaien die al mijn functies (bass, treble, volume...) kunnen regelen en dit wederzijds (dus van de UART naar µC en omgekeerd).
Wat ik reeds heb:
=================
Het volledige hardware ontwerp, PCB, en gans de schakeling op de print natuurlijk deze doet nu niks want hij staat in mute mode als er geen communicatie is via software.
Ik heb reeds een stukje software geschreven voor het besturen van mijn volume en bass regeling.
Ik maak gebruik van MikroC en stukjes assembler als het nodig blijkt
De volgende functies moeten worden geprogrammeert:
- VOLUME
- SPEAKER ATTENNUATORS
- AUDIO SWITCH
- BASS & TREBLE
Welke problemen heb ik nu
=========================
1) Ik wil graag mijn decimale waarde omzetten naar een hex code.
Hoe kan ik dat maken in een functie?
Misschien is er een andere aanpak om het beter op te lossen
denk aan binaire code zoals deze in de datasheets staat.
Mijn code staat nu in testfase.
2) Kan ik dezelfde werkwijze toepassen voor de andere functies?
3) In welke taal kan ik het best mijn frontend schrijven aan de
laptopzijde want moet ook RS232 ondersteunen ?
Ik ken de volgende talen : VB.NET, C#, Java, C++ MFC
4) Programmeer ik deze functies zowel in mijn microcontroller als in
het frontend programma? Welke mogelijkheden heb ik?
5) Als er andere ideeen zijn misschien met interrupts dan is het
welkom
In bijlage mijn testcode:
-------------------------
// Globale variabelen
int uart_rd;
int data;
void main()
{
ANSEL = 0; // Configuratie AN pinnen als digitaal
ANSELH = 0;
C1ON_bit = 0; // Comparatoren afleggen comparators
C2ON_bit = 0;
PORTB = 0;
TRISB = 0; // Configureer PORTB als output I2C
I2C1_Init(100000); // Initialisatie I2C communicatie
UART1_Init(9600); // Initialisatie van UART module op 9600
Delay_ms(100); // Even wachten op de module
while (1)
{ // continu uitvoeren oneindige lus
if (UART1_Data_Ready())
{ // Als de module data ontvangen heeft
uart_rd = UART1_Read(); // lees dan deze data en zet in uart_rd
// UART1_Write(uart_rd); // zend de data eens terug (ter controle)
}
// =================================================================
// uart_rd opsplitsen
// 1 - 101 => volume regeling
// 199 - 301 => bass regeling
// 399 - 401 => een andere regeling
// =================================================================
if(1 < uart_rd < 101)
{
//data = uart_rd;
// formule om van 1-101 naar een hex waarde te gaan
// om deze dan te verzenden via I2C
I2C1_Start(); // maak een start conditie I2C
I2C1_Wr(0x0A); // klok data binnen in de TDA 0x0A vervangen door DATA!!!!
I2C1_Stop(); // maak een stop conditie I2C
Delay_100ms(); // even wachten
} // einde regeling Volume
if(199 < uart_rd < 301)
{
// data = uart_rd;
// formule om van 1-101 naar een hex waarde te gaan
// om deze dan te verzenden via I2C
I2C1_Start(); // maak een start conditie I2C
I2C1_Wr(0x0A); // klok data binnen in de TDA 0x0A vervangen door DATA!!!!
I2C1_Stop(); // maak een stop conditie I2C
Delay_100ms(); // even wachten
} // einde regeling Bass
}
}
/*I2C1_Start(); // issue I2C start signal
I2C1_Wr(0xA2); // send byte via I2C (device address + W)
I2C1_Wr(2); // send byte (data address)
I2C1_Repeated_Start(); // issue I2C signal repeated start
I2C1_Wr(0xA3); // send byte (device address + R)
PORTB = I2C1_Rd(0u); // Read the data (NO acknowledge)
I2C1_Stop(); // issue I2C stop signal*/
}
Met veel belangstelling kijk ik uit naar de mogelijkheden en de ideeen en aanwijzingen van jullie
Bedankt alvast
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Ik wil graag mijn decimale waarde omzetten naar een hex code.
Het getal 123 weergeven als "7B", dus? Dat kan zo:
void d2hex(unsigned char d, char *ptr)
{
unsigned char nibble;
nibble = (d & 0xF0) >> 4; // hoogste nibble
if (nibble < 10) {
*ptr = nibble + '0'; // 0 ... 9
} else {
*ptr = nibble + 55; // A ... F
}
ptr++; // Pointer opschuiven
nibble = d & 0x0F; // Laagste nibble
if (nibble < 10) {
*ptr = nibble + '0';
} else {
*ptr = nibble + 55;
}
}
Je geeft daarbij het getal op als eerste argument, en de plaats waar het resultaat moet komen (een string) als 2e argument.
Henry S.
Moderator
Confucius says chà bù duo. Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.
Op 12 augustus 2009 10:37:05 schreef mcu_boytje:
Om de veiligheid had ik geen idee waar ik die zou plaatsen mijn onderwerp. Het handelt over deels hardwware ontwerp en microcontroller gebaseerd ontwerp vandaar denk bij schoolvragen is beste.
Of ontwikkeling, als het geen schoolopdracht (eindwerk, stage etc) is.
En kijk even naar de code-tag: http://www.circuitsonline.net/forum/faq/2