Matrisberäkningar med för STM32?
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Matrisberäkningar med för STM32?
Nätet kryllar av färdiga kodexempel att titta på:
Real time Data plot from serial port
https://se.mathworks.com/matlabcentral/ ... erial-port
Arduino Realtime graph plot using Matlab
Plotting Live Data of a Temperature Sensor using Arduino and MATLAB
https://se.mathworks.com/videos/plottin ... 21317.html
USB Interfacing and Real Time Data Plotting with MATLAB
https://ashrafi.sdsu.edu/PDF/matlabUSBReport.pdf
Real Time Data Graphing 921600 baud UDP
https://se.mathworks.com/matlabcentral/ ... 0-baud-udp
Real time Data plot from serial port
https://se.mathworks.com/matlabcentral/ ... erial-port
Arduino Realtime graph plot using Matlab
Plotting Live Data of a Temperature Sensor using Arduino and MATLAB
https://se.mathworks.com/videos/plottin ... 21317.html
USB Interfacing and Real Time Data Plotting with MATLAB
https://ashrafi.sdsu.edu/PDF/matlabUSBReport.pdf
Real Time Data Graphing 921600 baud UDP
https://se.mathworks.com/matlabcentral/ ... 0-baud-udp
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Matrisberäkningar med för STM32?
Och istället för att ägna veckor åt att skriva egna hjul så kan man ju *trumvirvel* använda standardfunktionerna
för att processa strängar i Matlab, C/C++, Java...
"%Convert to an array of numbers
dataNum = sscanf(dataStr, '%d,%d,%d,%d,%d,%d', bytesToRead);"
för att processa strängar i Matlab, C/C++, Java...
"%Convert to an array of numbers
dataNum = sscanf(dataStr, '%d,%d,%d,%d,%d,%d', bytesToRead);"
Re: Matrisberäkningar med för STM32?
Återigen, det här är problem som beror på din implementation och behöver inte alls bli som du säger.Al_Bundy skrev:Det är mycket möjligt att skicka "Hej" så kommer "Hej" fram. Men tänk om du har en uC som bara sprutar ut "Hej" i 500 gånger per sekund. Så fort du ska läsa "Hej" så blir det "HejHejHejHejHejHejHejHej".
Du väljer istället att skicka "Hej\n" och nu har du massa
Hej
Hej
Hej
Hej
Hej
Hej
Hej
Lägg till lite problem också
He
j
Hej
Hej
He
H
HejHej
HejHejHej
Hej
Låt oss säga att du vill skicka "X,Y,Z,O,P" Då måste du dela upp varje text med ",". Detta blir lite forloopar för att dela upp en text till olika värden.
Jag anser att det blir mer bökigt att jobba med strängar om man ska skicka data mellan olika enheter.
Det var ju detta som många här i tråden ansåg att det är bättre att man bittlanga istället.
Re: Matrisberäkningar med för STM32?
Klart den bygger på min implementation. Jag har inte sagt något annat. Men jag har mer kontroll, personligen, av det jag skickar om jag skickar igenom att använda bitoperationer
Re: Matrisberäkningar med för STM32?
Nu blir det inge MATLAB härKrille Krokodil skrev:Och istället för att ägna veckor åt att skriva egna hjul så kan man ju *trumvirvel* använda standardfunktionerna
för att processa strängar i Matlab, C/C++, Java...
"%Convert to an array of numbers
dataNum = sscanf(dataStr, '%d,%d,%d,%d,%d,%d', bytesToRead);"
Det kommer bli Java för Android/Iphone applikationer som kommunicerar med C via Modbus.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
- Swech
- EF Sponsor
- Inlägg: 4689
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Matrisberäkningar med för STM32?
Är vi överens om jag säger att din rutin som skickar 0-65535 alltid skickar två bytes och att dessa kan vara allt mellan 0 och 255.Al_Bundy skrev:Så här ser min implementering ut för att skicka ett tal som är mellan 0 till under 65536.
Skicka C-kodTa emot C-kodKod: Markera allt
/* * adc is beteen 0 to 4095 */ int adc = adcValues[0]; // We store adcValues[i] into a temporary array due to changes of adcValues /* * Send */ uint8_t data = (uint8_t) (adc >> 8); // First data HAL_UART_Transmit(&huart2, &data, sizeof(data), TIME_OUT); data = (uint8_t) (adc & 0xFF); // Second data HAL_UART_Transmit(&huart2, &data, sizeof(data), TIME_OUT); HAL_Delay(10);
Kod: Markera allt
while (1) { memset(stm32->readBuffer, '\0', sizeof(stm32->readBuffer)); /* * Flush */ tcflush(stm32->serialPort, TCIFLUSH); // Get the latest values /* * Collect bytes until the ACK is comming */ int receiveBytes = read(stm32->serialPort, stm32->readBuffer, sizeof(stm32->readBuffer)); /* * Print */ int count = 0; int adc = 0; for (int i = 0; i < receiveBytes; i++) { if (count == 0) { adc = (int) stm32->readBuffer[i] * 256; count++; } else if (count == 1) { adc += (int) stm32->readBuffer[i]; count = 0; printf("value %d\n", adc); stm32->adc = adc; // save the latest adc = 0; } } /* * receiveBytes is the number of bytes read. receiveBytes may be 0 if no bytes were received, and can also be -1 to signal an error. */ if (receiveBytes < 0) { printf("Error reading: %s", strerror(errno)); } }
Är vi också överens om att din rutin endast skickar två bytes.
ACK som du snackar om skickas alltså inte utan mottagande enhet antar att om det inte kommer tecken inom rimlig tid så är sändningen klar.
Vi har om vi är överens då ett system som spottar ut två tal mellan 0 och 255 och därefter tystnar.
Mottagande enhet väntar på att den interna C rutinen skall spotta ut ett antal bytes baserat på när den tycker att sändande enhet har skickat klart.
Är vi överens om detta också?
Hur kommer det sig då att mottagande enhet inte indikerar att ett udda antal mottagna tecken måste innebära att något gått fel ?
T.ex. du skickar 14 och 62 motsvarar 14*256 + 62 = 3646
men om vi antar att det slinker in en 0 i överföringen så du får 14 0 62 istället
Då får du 14*256 + 0 = 3584 och 62 kastas bort
Om man skickar data i textform så får man följande fördelar.
Varje byte som kommer skall vara mellan ascii '0' och ascii '9' eller några få specialtecken som man kan definiera.
Alla övriga tecken är felaktiga. Upptäcks direkt.
När man felsöker går det att titta på data i ett terminalprogram och läsa direkt. Sparar många timmars felsökning.
Specialtecken så som slut på data, komma, ny data skiljer sig då från dina andra mätvärden och kan inte förekomma i "rådatan" eftersom den alltid är i ascii "0-9"
Swech
Re: Matrisberäkningar med för STM32?
Ja.Swech skrev: Är vi överens om jag säger att din rutin som skickar 0-65535 alltid skickar två bytes och att dessa kan vara allt mellan 0 och 255.
Ja.Är vi också överens om att din rutin endast skickar två bytes.
Jag tog bort ACK och lade till en fördröjning på 10 uS.ACK som du snackar om skickas alltså inte utan mottagande enhet antar att om det inte kommer tecken inom rimlig tid så är sändningen klar.
Inte tystnar. Den fortsätter skicka.Vi har om vi är överens då ett system som spottar ut två tal mellan 0 och 255 och därefter tystnar.
Den väntar inte. När STM32 skickar så gör den det hela tiden. Sedan så plockar mitt C-program upp dessa värden.Mottagande enhet väntar på att den interna C rutinen skall spotta ut ett antal bytes baserat på när den tycker att sändande enhet har skickat klart.
Är vi överens om detta också?
Lade till en fördröjning och nu är allt i sin ordningHur kommer det sig då att mottagande enhet inte indikerar att ett udda antal mottagna tecken måste innebära att något gått fel ?
T.ex. du skickar 14 och 62 motsvarar 14*256 + 62 = 3646
men om vi antar att det slinker in en 0 i överföringen så du får 14 0 62 istället
Då får du 14*256 + 0 = 3584 och 62 kastas bort
Jag säger inte att det är fel att skicka text. Jag skickade text -> hade inte koll -> någon rekommenderade att bitlanga -> testade det och det fungerade -> Bundy glad.Om man skickar data i textform så får man följande fördelar.
Varje byte som kommer skall vara mellan ascii '0' och ascii '9' eller några få specialtecken som man kan definiera.
Alla övriga tecken är felaktiga. Upptäcks direkt.
Jo. Men nu var det någon här i tråden som sade att ASCII är endast för felsökning och bästa är att man bitlangar och därmed är det bättre.När man felsöker går det att titta på data i ett terminalprogram och läsa direkt. Sparar många timmars felsökning.
Min lärare har alltid förespråkat att man skickar bit istället för ASCII-tecken för tecken.
Re: Matrisberäkningar med för STM32?
> som sade att ASCII är endast för felsökning...
Citera eller länka till det!
> att man skickar bit istället för ASCII-tecken
Väldigt tveksamt om han faktiskt sa just så.
Citera eller länka till det!
> att man skickar bit istället för ASCII-tecken
Väldigt tveksamt om han faktiskt sa just så.
Re: Matrisberäkningar med för STM32?
Nu var det alltså en åsikt. Vi ska inte hänga någon för detta. OK?svanted skrev: min åsikt är att ASCII i protokoll via en socket är bra att använda då man kan simulera sändare och mottagare med vanlig telnet för felsökning och utveckling, detta när det gäller att överföra enkla mätdata, typ några kb/s, har omvandlingstider ingen som helst betydelse.
Re: Matrisberäkningar med för STM32?
OK, men det var (som vanligt) inte vad du skrev.
Det som skrivs i citatet är att det (även) är praktiskt vid
felsökning och tester. Inte att det "enbart är för felsökning".
Men det är ju i linje med alla dina andra (miss-)tolkningar
av det mesta som skrivs här...
Det som skrivs i citatet är att det (även) är praktiskt vid
felsökning och tester. Inte att det "enbart är för felsökning".
Men det är ju i linje med alla dina andra (miss-)tolkningar
av det mesta som skrivs här...
Re: Matrisberäkningar med för STM32?
Jag kan ju använda ASCII tabellen för att torka bort olja från oljetråget. Eller så kan jag vika pappersflygplan med den.
Re: Matrisberäkningar med för STM32?
Så här ser det ut i Java för att läsa 8-bit värden som skickas via socket. Ja koden fungerar.
Det är för Android som ska tala med ett C program på min PC.
Någon som vill komma igång med Android/Iphone appar? Jag kan förklara lite enkelt hur. Gluon!
Så om jag skickar detta via C
Då visar Java
Det är för Android som ska tala med ett C program på min PC.
Någon som vill komma igång med Android/Iphone appar? Jag kan förklara lite enkelt hur. Gluon!
Kod: Markera allt
package com.gluonapplication.thread;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
public class SocketConnection {
private static Socket socket;
private static String ip = "127.0.0.1";
private static int port = 5000;
private static String message;
private static DataInputStream in;
private static DataOutputStream out;
private static int[] readBuffer = new int[256];
/*
* This will connect to the server
*/
public void connectionServer(){
try {
socket = new Socket(ip, port);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (Exception e) {
message = e.getMessage();
}
}
/*
* This will send an int array
*/
public void sendData() {
}
/*
* This will receive an int array
*/
public void receiveData() {
try {
/*
* Read all 8-bit values
*/
int i = 0;
while(in.available() > 0) {
int b = in.read();
readBuffer[i] = b;
i++;
}
for(int j = 0; j < i; j++) {
System.out.println(readBuffer[j]);
}
} catch (Exception e) {
message = e.getMessage();
}
}
}
Kod: Markera allt
int hello[5] = {65, 23,123, 21,34};
write(new_socket , hello , sizeof(hello));
Snyggt att den avgränsar med 000. Men misstänker att det har med sizeof att göra. Varje int är ju 4 bytes i mitt fall.65
0
0
0
23
0
0
0
123
0
0
0
21
0
0
0
34
0
0
0
Re: Matrisberäkningar med för STM32?
Och varför tror du det är 4 bytes per int? Det är inte för att avgränsa med 0
Och har du testat skicka text kommer du se att det faktiskt funkar att skicka text.
Och har du testat skicka text kommer du se att det faktiskt funkar att skicka text.
Re: Matrisberäkningar med för STM32?
Jag tror i detta fall så ska jag skicka ASCII kod typ 53 54 55 vilket betyder 567. Jag ska ju göra det från Java.
Snart klar med min adaptiva regulator. Ett företag har redan varit intresserad av mina idéer och vill att jag ska hälsa på.
Snart klar med min adaptiva regulator. Ett företag har redan varit intresserad av mina idéer och vill att jag ska hälsa på.
Re: Matrisberäkningar med för STM32?
53 54 55 är värdena som motsvarar '5' '6' '7' i ascii tabellen. Anger man de istället i hex blir det direkt mycket tydligare vilka tecken de motsvarar (0x35,0x36,0x37)
>Jag ska ju göra det från Java.
Vad har val av språk för påverkan menar du?
>Jag ska ju göra det från Java.
Vad har val av språk för påverkan menar du?