Pulsecodemodulation in C?!
Geizhals » Forum » Programmierung » Pulsecodemodulation in C?! (12 Beiträge, 88 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Pulsecodemodulation in C?!
06.06.2005, 13:25:24
Wir müssen in de Schule einen PCM machen.
Dieser soll über ein in C geschriebenes Programm den Com-Port ansprechen,an dem ein Tiefpass aus Kondensator und Lautsprecher hängt.
Entsprechend der Frequenz soll ein Ton ausgegeben werden. Das Programm und die Schaltung haben wir schon,aber irgendwie funktioniert es nicht.
Vielleicht habt ihr eine Idee... Hier ist das Programm:
(math.h,windows.h und stdio.h in <>)
---
#include math.h
#include windows.h
#include stdio.h
int main ()
{
   /* Definitionen*/

DWORD wb;
HANDLE hCom;
   DCB dcb;
   FILE *handle;
   int Data[115200], n, p, nr, frequenz, perioden;
   double sinwert;

   /* Einstellung f. File & COM */

   handle = fopen("sin.txt","w");
hCom = CreateFile("COM1",
   GENERIC_READ|GENERIC_WRITE,
   0, NULL, OPEN_EXISTING, 0, NULL);

   dcb.BaudRate = CBR_115200;     // set the baud rate
   dcb.ByteSize = 8;             // data size, xmit, and rcv
   dcb.Parity = NOPARITY;        // no parity bit
   dcb.StopBits = ONESTOPBIT;    // one stop bit


   perioden = pow(10,6);
frequenz = 100000;
   nr = 115200/frequenz;

   /* Berechnung der Sinuswerte */

for (n=0; n < nr; n=n+1)
{
sinwert = sin (2*M_PI * n/(double)nr);
Data[n] = 128 + floor(100 * sinwert + 0.5);
      fprintf(handle,"%d\t%g\t%d\n",n,sinwert,Data[n]);
}

   /* Ausgabe in File & COM */

for(p=0; p<perioden; p+=1)
{
unsigned char wert;
for (n=0; n < nr; n=n+1)
{
wert = Data[n];
WriteFile(hCom, &wert , sizeof(wert), &wb, 0);
}
}
   printf("Ende!");
getchar();
return 0;
}
---

Eigentlich müsste es gehen,denn unser Lehrer hat uns ein Buch gezeigt da steht ein Visual Basic Code drinnen der funzen müsste...

---

Private Sub Command1_Click()
    Dim Dat(10000)
    pi = 3.1415
    freq = Val(Text1.Text)
    Nr = Int(11520 / freq)
    For n = 1 To 10 * Nr
        Dat(n) = 128 + Int(100 * Sin(2 * pi * n / Nr))
    Next n
    out = 128
    For n = 1 To 10 * Nr
        out = out + 5
        Data = Dat(n)
        Bit = 1
        send = 0
        For i = 1 To 8
            If Data < out Then
                send = send + Bit
                out = out - 5
            Else
                out = out + 5
            End If
            Bit = Bit * 2
        Next i
        out = out - 5
        Dat(n) = send
    Next n
    REALTIME
    For n = 1 To 100
        For i = 1 To 10 * Nr
            SENDBYTE 2, Dat(i)
        Next i
    Next n
    NORMALTIME
            
End Sub

Private Sub Form_Load()
OPENCOM 2, 115200, 0, 8, 1, 100, 100
DTR 2, 1
RTS 2, 1
End Sub

Private Sub Form_Unload(Cancel As Integer)
CLOSECOM 2
End Sub

---

Thx im *TRÖT*,Rebell der Sonne
---------------------------------------------------------------------
"Jedes Herz ist eine revolutionäre Zelle." (aus "Die fetten Jahre sind vorbei")
06.06.2005, 15:45 Uhr - Editiert von Rebell der Sonne, alte Version: hier
Antworten PM Alle Chronologisch
 
Melden nicht möglich
.  Re: Pulsecodemodulation in C?!  (Somnatic am 06.06.2005, 15:30:15)
....  Re(4): Pulsecodemodulation in C?!  (Somnatic am 06.06.2005, 15:51:45)
......  Re(6): Pulsecodemodulation in C?!  (Somnatic am 06.06.2005, 20:51:35)
.  Re: Pulsecodemodulation in C?!  (adhoc am 06.06.2005, 19:20:46)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung