Hallo, ich habe mir ein APRS Empfänger mit TCM3105 und Atmega 328 gebaut. Dafür suche ich jetzt eine NRZI Routine für das Biteinlesen. Ja ich kenne MicroAPRS, aber trotzdem soll der TCM3105 NICHT durch Software ersetzt werden! Das funktioniert einfach zu lausig. Das ist zwar keine unlösbare Aufgabe, aber vielleicht hat das ja schon mal jemand gebraucht und entwickelt, und ich kann mir den Aufwand sparen. Gruß Markus
:
Verschoben durch Moderator
Hi, hab' im eevblog-Forum den Faden hier gefunden ... https://www.eevblog.com/forum/beginners/can-i-demodulate-bell-202-fsk-using-a-microcontroller/ ... der dorthin ... https://github.com/jarodgers/bell202_decoder ... verlinkt. bell202.c kurz überflogen: Scheint, als würde da das Audiosignal direkt dekodiert (ohne TCM3105). Also musst du den Zerocrossing-Zähler/Detektor raus operieren. Der Dateneingangs-Pin kann der Pin-Change-Interrupt bleiben: einfach immer als "// tone has changed" und entsprechendem Pegel Mark/Space an der Stelle in die Kette einspeisen. Bit stuffing wird danach bereits berücksichtigt. Aus dem Datenblatt des TCM3105 habe ich entnommen, dass der ein carrier-detect-Ausgang hat. Mit dem ließe sich der Pinchange-Interrupt ein- und ausschalten. Vielleicht tut es aber auch ein AND-Gatter, das den RXD nur durchlässt, wenn auch ein Träger vorhanden ist. Prosit. mfg mf
:
Bearbeitet durch User
// Grok, die X-ai, kann sowas wunderbar. // "write me a nrzi decoder in C pls" #include <stdio.h> #include <stdint.h> // Decode NRZI signal // Input: nrzi_data (array of signal levels, 0 or 1) // length (number of samples) // Output: decoded_data (array to store decoded bits) // Returns number of decoded bits int nrzi_decode(const uint8_t *nrzi_data, int length, uint8_t *decoded_data) { if (length <= 0 || !nrzi_data || !decoded_data) return 0; uint8_t last_level = nrzi_data[0]; // Initial signal level int decoded_index = 0; for (int i = 1; i < length; i++) { // Transition (0->1 or 1->0) means 1, no transition means 0 if (nrzi_data[i] != last_level) { decoded_data[decoded_index++] = 1; last_level = nrzi_data[i]; } else { decoded_data[decoded_index++] = 0; } } return decoded_index; } // Example usage int main() { // Example NRZI signal: 1 0 0 1 1 (transitions at 1st, 4th, 5th positions) uint8_t nrzi_signal[] = {1, 0, 0, 0, 1, 1}; int length = sizeof(nrzi_signal) / sizeof(nrzi_signal[0]); uint8_t decoded_bits[32]; // Buffer for decoded data int decoded_length = nrzi_decode(nrzi_signal, length, decoded_bits); printf("NRZI Input: "); for (int i = 0; i < length; i++) { printf("%d ", nrzi_signal[i]); } printf("\nDecoded Output: "); for (int i = 0; i < decoded_length; i++) { printf("%d ", decoded_bits[i]); } printf("\n"); return 0; }
:
Bearbeitet durch User
Hadmut F. schrieb: > // Grok, die X-ai, kann sowas wunderbar. Nur die Code-Tags hättest du selber hinzufügen oder der KI sagen müssen, dass es ein Beitrag für mikrocontroller.net werden soll 😄
Hadmut F. schrieb: > // Grok, die X-ai, kann sowas wunderbar. Großartig, noch mehr KI-Slop. Die komplette Verblödung schreitet mit großen Schritten voran.
Hadmut F. schrieb: > // Grok, die X-ai, kann sowas wunderbar. Warum der TO nur nicht auf die Idee gekommen ist? Harald K. schrieb: > Großartig, noch mehr KI-Slop. Die komplette Verblödung schreitet mit > großen Schritten voran. Man kann die KI in diesem Fall doch auch als Nachschlagewerkk betrachten.
Harald K. schrieb: > Die komplette Verblödung schreitet mit > großen Schritten voran. Manche sagen wir hätten das Ziel fast erreicht.
Rahul D. schrieb: > Man kann die KI in diesem Fall doch auch als Nachschlagewerkk > betrachten. Das bringt man dann allerdings nicht mit ›I‹ in Zusammenhang. Es sollte besser halluzinierendes Sammelsurium Ideen anderer, dessen Antworten nicht im Geringsten vertraut werden darf, heißen. Den Machern muss man allerdings eine gewisse Cleverness zusprechen. Sie habe einen nahezu perfekten Weg gefunden, einer riesigen Anzahl von Idio^H^H^Hnvestoren das Geld aus der Tasche zu ziehen.
Norbert schrieb: > Das bringt man dann allerdings nicht mit ›I‹ in Zusammenhang. > Es sollte besser halluzinierendes Sammelsurium Ideen anderer, dessen > Antworten nicht im Geringsten vertraut werden darf, heißen. Man sollte schon beurteilen können, was die KI oder irgendwelche NI-Tippgeber empfehlen, oder die Vorschläge entsprechend durch andere Quellen verfizieren können.
Rahul D. schrieb: > Man sollte schon beurteilen können, was die KI oder irgendwelche > NI-Tippgeber empfehlen, oder die Vorschläge entsprechend durch andere > Quellen verfizieren können. Frage möglichst Aussagekräftig formulieren. Ergebnis auf groben Schwachsinn überprüfen. Frage weiter verfeinern. Ergebnis auf groben Schwachsinn überprüfen. Beliebig iterieren, dann. Ergebnis auf ›halbwegs akzeptabel‹ prüfen. Syntaxfehler entfernen. Testdaten erstellen. Testroutinen schreiben. Ergebnis endgültig verifizieren. In Summe: Immer schön langsam, immer schön gemächlich. Oder halt der religiöse Ansatz: Immer schön Glauben, immer schön Hoffen. Oder – in leichter Abwandlung – der Descartes Ansatz: Ich sollte zwar denken, aber ich will nich'
Norbert schrieb: > Oder – in leichter Abwandlung – der Descartes Ansatz: > Ich sollte zwar denken, aber ich will nich' Gilt im Umkehrschluss dann auch der abgewandelte Satz von Descartes: "Ich denke nicht, also bin ich auch nicht." ???
Danke für die vielen Beiträge. KI ist nicht so meins, da bin ich etwas altmodisch. Aber mit dem Link mit dem Bell 202 (Danke Achim) kann ich schon mal was anfangen. Denke da kann ich was draus machen. Vielen Dank. Gruß Markus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.