Matrisberäkningar med för STM32?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Icecap
Inlägg: 26610
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Matrisberäkningar med för STM32?

Inlägg av Icecap »

För att en kommunikation kan fungera stabilt ska man till varje tid kunde rycka ledningen och återkoppla den.
Visst kan man tappa paket men det ska finnas en synkronisering som säkerställer att man kan veta ATT ett paket har kommit och att det är ett FULLT paket.

Det som skiljer de olika paket ifrån varandra kan vara en viss tid utan data eller ett sätt att peta in ett speciellt tecken som skiljer dom isär.

Ett sätt kan vara att skicka data som text med STS och ETX.
Ett annat är att köra binärt med en Escape-byte som effektivt sett är en utökning av de värden som kan överföras ökas från 256 till mer.
Ett tredje sätt är att hålla paus mellan blocken.

Problemet för dig, Al, är att man faktisk ska förstå hur det hänger ihop för att det ska vara enkelt och DÄR har du en utmaning. Du håller på om linjär och kvadratisk programmering men det är ju mest klippa-och-klistra du utför.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jag vill bara förtydliga min algoritm när jag valde 0x06 som startsignal.

Först så fick jag denna signal
15
251
15
251
15
15 // <--- här. Dubbla
251
15
251
15
251
15
251
Men jag fick problem då programmet läste in dubbla tecken, av någon lustig anledning.

Så då lade jag till en 6:a mellan
6
15
251
6
15
251
6
15
15
251
6
15
251
6
15
251
6
15
251
Sedan ändrade jag min algoritm till detta där jag lade till denna rad

Kod: Markera allt

if (stm32->readBuffer[i] == 0x06 && count == 0) 

Kod: Markera allt

int readUSB(struct USB* stm32) {

	/*
	 * Reset with zeros
	 */
	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 == 1) {
			adc = (int) stm32->readBuffer[i] * 256;
			count++;
		} else if (count == 2) {
			adc += (int) stm32->readBuffer[i];
			count = 0;
			printf("value %d\n", adc);
			stm32->adc = adc; // save the  latest
			adc = 0;
		}

		/*
		 * This finds the ACK value and then we can start counting
		 */
		if (stm32->readBuffer[i] == 0x06 && count == 0) {
			count = 1;
		}

	}

	/*
	 * 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));
	}

	return 0;
}
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Icecap skrev:För att en kommunikation kan fungera stabilt ska man till varje tid kunde rycka ledningen och återkoppla den.
Visst kan man tappa paket men det ska finnas en synkronisering som säkerställer att man kan veta ATT ett paket har kommit och att det är ett FULLT paket.

Det som skiljer de olika paket ifrån varandra kan vara en viss tid utan data eller ett sätt att peta in ett speciellt tecken som skiljer dom isär.

Ett sätt kan vara att skicka data som text med STS och ETX.
Ett annat är att köra binärt med en Escape-byte som effektivt sett är en utökning av de värden som kan överföras ökas från 256 till mer.
Ett tredje sätt är att hålla paus mellan blocken.

Problemet för dig, Al, är att man faktisk ska förstå hur det hänger ihop för att det ska vara enkelt och DÄR har du en utmaning. Du håller på om linjär och kvadratisk programmering men det är ju mest klippa-och-klistra du utför.
Jag har tyvärr inget behov utav återkoppling i detta fall. Jag utgår från att om jag skickar talet 200 så får jag talet 200. Men skickar jag strängen "200" så kanske jag får "20" den första gången och "0" den andra gången.

Märks att du inte förstår vad du talar om. Helt seriöst. Detta måste vara det dummaste jag har hört på detta forum. Skulle vara intressant om du kunde slå min på fingrarna angående mitt område?
Senast redigerad av Al_Bundy 4 mars 2019, 12:01:13, redigerad totalt 1 gång.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

guckrum skrev:Text är i princip alltid att föredra, bland annat av skäl som angetts tidigare i tråden.
Gick inte så bra för mig. Kunde inte hålla koll på hur mycket jag skickade. Därför gick jag ifrån denna metod och testade att bitlanga, vilket fungerade utmärkt :)
sodjan skrev:> Hur fungerar ett CR?

Humor! :-)
Humor har jag alltid :)
> Sodjan var den som föreslog att skicka text, jag gjorde det, men jag kunde inte få någon kontroll över hur mycket jag skickade.

Väldigt märkligt! Det är ju det absolut enklaste att fixa.
Ja, det trodde jag också, men det var helt enkelt bättre att bitlanga :)
> Sedan var det du eller någon annan som föreslog att dela upp bitarna, det gjorde jag och det fungerade.

Och av det drar du slutsatsen att det första "inte fungerar" generellt? Medan det faktum att du hade
lite tur med det andra gör att det "fungerar". Dessutom är att "dela upp bitarna" något helt annat än
frågan om hur man kodar och skickar data. Du är fullständigt lost här...
Jag har tidigare i tråden sagt att jag föredrog inte att skicka strängar. Bland annat min lärare varnade oss att skicka strängar == dålig praktik. Nu insåg jag praktiken.
Problemet var att om jag skickade denna text "3214,3242,1032\n" så kunde min dator läsa t.ex. "3201,234" och sedan nästa meddelande kom "42,1032\n". Ett problem som jag hade för jag hade inte koll på det jag skickade.
> Jag har både hört från min lärare att det är dumt att skicka text...

Vilken komplett idiot...
Snarare smartast av alla här tillsammans på forumet.
> ...och har insett detta också.

Men han är i alla fall inte ensam. Skönt för honom.
Något som är unikt med detta forum är all denna envisa attityd och strävan att få rätt hela tiden samt ej kunna ta kritik. Säkerligen generationsskillnad.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Matrisberäkningar med för STM32?

Inlägg av sodjan »

Jag kan i alla fall lova dig en sak, jag *ska* försöka hålla mig bort från den här tråden i fortsättningen.
Så mycket samlad idioti på en plats fixar jag bara inte längre. Jag håller mig till mitt betalda jobb där
35 års erfarenhet av kommunikation (mestadels seriell) i industrimiljö kommer till nytta och uppskattas.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Erfarenhet i mätt i tid är ingen garanti.

Jag testade olika metoder och nu testade jag bearing's metod. Så det är idioti?
Shimonu
Inlägg: 311
Blev medlem: 21 oktober 2015, 22:44:33

Re: Matrisberäkningar med för STM32?

Inlägg av Shimonu »

Ditt problem är att du är snabb att slänga skulden på metoden innan du felsöker om bristen kanske ligger i din implementation eller ditt tänkande. Texten fungerar helt rätt men du kan bara inte göra 1 + 1.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Det var det jag gjorde, men då var det någon som sade "Det är bättre om du gör på mitt sätt". Då testade jag det också, och det fungerade.

Jag får flertal tips och förslag från er, vilket jag är mycket tacksam för, men så länge jag inte jag testar just er eller era metoder, utan bara någon enskild får sitt förslag beprövad. Då känner ni att ni får inte den där bekräftelsen som ni känner vara förtjänad. Medan den som gav det förslag som fungerade för mig, blir glad i tråden.

Så är det hela tiden. Så det är inte mig det är fel på när det kommer till attityden. Visst, jag är inte bäst i världen på att programmera uC's, men jag har andra starka tekniska sidor istället.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4736
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Swech »

Är det inte så att det saknas lite funderande över de olika tipsen istället
för att handlöst kasta sig över olika lösningar.

Du / din lärare säger att det är dumt att skicka text
Allt har sina för och nackdelar.
Försök att lista ned 5 för och nackdelar med båda metoderna, d.v.s text mot data.
Gör det så återkommer jag med en egen lista

Swech
hummel
Inlägg: 2504
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Matrisberäkningar med för STM32?

Inlägg av hummel »

Al,
Det som är krävs är att man förstår hur det fungerar.
Man använder alltid någon typ av kommunikationsprokoll. Detta kan vara så enkelt att man helt struntar i att verifiera sina data på något sätt eller med någon form av kontroll som innefattar checksummering av meddelandet och även handskakning med verifiering att meddelandet har kommit fram korrekt.

Det är inte svårt att kommunicera mellan dina enheter seriellt i text, binärt, oktalt, BCD eller hur du nu vill beskriva din information.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jag kan inte lista 5 nackdelar, däremot en nackdel att det var svårt att hålla koll på datan om man skickade strängar.
Shimonu
Inlägg: 311
Blev medlem: 21 oktober 2015, 22:44:33

Re: Matrisberäkningar med för STM32?

Inlägg av Shimonu »

Det beror på din implementation. Jag har en implementation med data där jag kollar tecken för tecken var meddelanden börjar och slutar. Där har jag samma fenomen som du pratar att det kommer data i klumpar men det är inget problem när jag hanterar data byte för byte och sen sparar undan färdiga paket.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Så här ser min implementering ut för att skicka ett tal som är mellan 0 till under 65536.

Skicka C-kod

Kod: 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);
Ta emot C-kod

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));
		}
	}
Användarvisningsbild
Icecap
Inlägg: 26610
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Matrisberäkningar med för STM32?

Inlägg av Icecap »

Ja, jag får nog acceptera att guden som inte ens kan kombinera två bytes har sagt att alla de sätt han inte har fattat är totalt fel. Överföring av text är t.ex. fullständigt omöjligt.

Visst, det är bara otroligt många industriella projekt som har fungerat på det vis - men då har det ju varit kunnigt folk som har varit igång och inte Al.

Jag har använd textöverföring genom många år när datamängden är normal och konstigt nog har det aldrig fallerat - fastän det definitivt inte fungerar.

Jag känner att när guden Al kan så mycket borde det väl knappast vara behov för h*n att fråga så pass mycket, alla råd är överflödiga för att ingen utom Al fattar.

Nåväl, jag kommer hädanefter att låta Al segla sin egen sjö.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

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.
Senast redigerad av Al_Bundy 4 mars 2019, 15:17:37, redigerad totalt 1 gång.
Skriv svar