AI kan ha sina sidor

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
bjornj
Inlägg: 233
Blev medlem: 7 november 2018, 11:51:47

AI kan ha sina sidor

Inlägg av bjornj »

Jag försöker få till en frekvenssyntezeiser med kretsen SAA5710 och en Arduino uno.
Det handlar om att skicka ett 15 bitars kontrollord kallat ord B och ett 15 bitarsord för frekvensen kallat ord A.
Båda orden inleds/avslutas med en nolla eller etta för att avgöra vilket av orden det gäller.
Jag var osäker på i vilken ordning bitarna skulle skickas, MSB eller LSB först.
Jag frågade AI under Google och beroende hur jag formulerade frågan fick jag tvärsäkra svar att MSB respektive LSB skulle skickas först.
Båda alternativen tyckte dock att biten som avgör ord A eller B skulle skickas sist.
Ett alternativ tyckte även att enable skulle vara låg under sändning.
Om man kollar på bilden i databladet så ligger ordvalsbiten först före 2^14 2^13 osv.
Skärmbild 2026-03-23 155941.png
Och enable skall vara hög.
Vad skall man tro?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
AndLi
Inlägg: 18910
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: AI kan ha sina sidor

Inlägg av AndLi »

Data word A ser väl ut att vilja ha MSB först?
Användarvisningsbild
MiaM
Inlägg: 13921
Blev medlem: 6 maj 2009, 22:19:19

Re: AI kan ha sina sidor

Inlägg av MiaM »

Håller med, MSB först. Det gäller ju också de där fyrabitarsgrejerna i ord B.

Allmänt ser det ut som RS232 fast med 16 bitar istället för vanliga 5-8 bitar.
bjornj
Inlägg: 233
Blev medlem: 7 november 2018, 11:51:47

Re: AI kan ha sina sidor

Inlägg av bjornj »

Om man fyller i ett lämpligt 15bitarsmönster för ord B så blir det 57 decimalt
förutom den inledande ettan. Den beräkning jag använder något förenklad är :
Tal = 57
for (int i = 1; i <= 15; ++i)
{
Data = tal % 2; // som ger etta eller nolla
tal = tal / 2; // halverar talet
}
Binärt blir det:100111000000000
Det som förbryllar är att det ju är LSB som kommer först. De mest signifikanta är ju idel nollor.
För orad A där decimalt 10000 är det tal som skall skickas binärt blir det:
000010001110010 med LSB till vänster.
Jag har vänt ordningen så att MSB kommer först enligt databladet:
010011100010000
Men nu är det en situation där ord B börjar med LSB och ord A börjar med
MSB.
Var tänker jag fel.
Jag är mycker konfunderad.
Användarvisningsbild
Icecap
Inlägg: 26919
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AI kan ha sina sidor

Inlägg av Icecap »

Båda börjar med MSB efter vad jag ser.
Kolla Word B: Sista 4 bits står i ordning T3, T2, T1, T0.
bjornj
Inlägg: 233
Blev medlem: 7 november 2018, 11:51:47

Re: AI kan ha sina sidor

Inlägg av bjornj »

jo, jag tror också att orden skall börja med MSB.
Prolemet är att när jag använder 57 som uttgångstal så
uppstår den binära sekvens jag tror är rätt med LSB först.
Användarvisningsbild
Icecap
Inlägg: 26919
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AI kan ha sina sidor

Inlägg av Icecap »

Nejdå - det är din KONVERTERING som går fel!

Jag gjorde om en konvertering i annan mjukvara från att gå från toppen vid att kolla om värdet var >= 1000000000 - och i så fall hur många av dom som fanns.
Stega ner 'måltalet' med 10* och göra om till ettor.

Jag gjorde i grunden som ditt sätt - men laddade in talen BAKLÄNGES i output buffern.

Du kan stega igenom såhär:

Kod: Markera allt

Tal = 57
for (int i = 15; i <= 1; --i)
  {
  Data = 0<(tal & (1<<i)); // som ger etta eller nolla
  }
Ett annat sätt:

Kod: Markera allt

Tal = 57
[code]for (int i = 15; i <= 1; --i)
  {
  Data = 0<(tal & (1<<15)); // som ger etta eller nolla
  Tal <<= 1;
  }
bjornj
Inlägg: 233
Blev medlem: 7 november 2018, 11:51:47

Re: AI kan ha sina sidor

Inlägg av bjornj »

Förlåt att jag envisas men om man har fått till en binär sekvens för ord B som ser ut som den man vill ha från vänster till höger Med FM = 1 först sedan 00111 och 8 nollor på slutet kanske det inte spelar någon roll hur man har räknat ut det. Eller är jag helt ute och cyklar på 15 famnar?
Användarvisningsbild
Icecap
Inlägg: 26919
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AI kan ha sina sidor

Inlägg av Icecap »

Om det är fasta kombinationer du ska skicka, ska du vara skriva dom i den följd du skickar dom.

Det kan kanske vara enkelt att skriva värden i binärt eller hex för översiktens skull.
bjornj
Inlägg: 233
Blev medlem: 7 november 2018, 11:51:47

Re: AI kan ha sina sidor

Inlägg av bjornj »

När det gäller ord B så är det ju samma sekvens hela tiden. Ord A måste ju räknas om för varje ny frekvens.
Att jag inte har använt binärtal direkt beror helt enkelt på mina usla kunskaper i C++.
Jag kom inte på något bättre sätt än att räkna ut det binära talet än på det sätt jag har visat tidigare.
Jag använde en basic till C++ konverterare som jag hittade på nätet.
Jag har sett att det finns kommandon som skickar ut bitarna en och en från ett binärtal tex. men jag
har inte orkat sätta mig in i det.
ToPNoTCH
Inlägg: 5348
Blev medlem: 21 december 2009, 17:59:48

Re: AI kan ha sina sidor

Inlägg av ToPNoTCH »

Mmm...

Människor kan ha sina sidor :wink:
Användarvisningsbild
Icecap
Inlägg: 26919
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AI kan ha sina sidor

Inlägg av Icecap »

Koden du visar är C och inte C++. Ganska likt - men C++ består av C med tillägg.

Utan att ha en rutin som faktisk skickar ut data till mojängen, finns det ju inget att gå vidare med.
Det är FULLT möjligt att ha en del af data fasta och en annan del som är variabel och sedan kombinera dom innan data skickas.

Det kan göras vid att ha de fasta delar som de ska vara och de delar som är variabla ska ALLA vara nollor.
Sedan -strax innan man skickar data, OR'ar man in variabla data och skickar de totala data 'som vanligt'.

Men utan vidare information om hur du vill lösa det hela, känns det lite lönlöst att gå vidare.

Data kan skickas med 'bit-bang' metoden, alltså att man har en portpinne (Pin_A) till klock-signalen och en annan portpinne (Pin_B) till data.

Kod: Markera allt

void send_data(uint16_t data)
  {
  uint8_t ctr;
  uint16_t bit_check = 0x4000
  while(bit_check)
    {
    Pin_A = (data & bit_check)>0;
    ; Timing delay if needed
    Pin_B = 1;
    ; Timing delay if needed
    Pin_B = 0;
    ; Timing delay if needed
    }
  Bit_check >>=1;
  }
Skriv svar