ATTiny 412 OOK Modulation

OP #7873881

Hallo liebe AVR-Community. Ich bin noch relativ neu in der MC Programmierung und hadere gerade mit folgendem Problem: Ich möchte ein 1 Byte langes Signal auf ein 433Mhz Trägersignal aufmodulieren und wollte dafür folgendes Programm in einer Low-Power Sendeeinheit mit 1Mhz Takt verwenden.

Den Takt stelle ich über die Arduino IDE ein. Deepseek sagt, die IDE setzt direkt die Fuses.

Nun zum Problem: Bei einem Takt von 20 Mhz und deaktiviertem Prescaler (Teilung = 1) bekomme ich die erhoffte Bitlänge von 500us. Wenn ich jetzt aber den Takt auf 1 Mhz stelle verringert sich die Bitlänge auf etwa 32us.

Daher habe ich ein einfaches Blink-Programm geschrieben um zu testen wie sich Bitlänge meines Signals in Verbindung mit Prescaler (Standardteilung von 6) und ohne Prescaler bei den Taktraten 1 Mhz und 20 Mhz verhalten.

Im Anhang eine Tabelle zur beobachteten Veränderung der Bitlänge unter o.g. Bedingungen.

Für den Fall dass noch nicht klar geworden ist was ich eigentlich möchte.. Ich möchte bei meinem Byte-Sendeprogramm eine Bitlänge von 500us einstellen können damit das Datensignal mit 2kbps auf mein Trägersignal aufmoduliert werden kann. Die Sendeeinheit soll mit möglichst wenig Strom auskommen daher die Idee den Takt auf 1 Mhz zu reduzieren.

Vielen Dank schonmal im vorraus!

Testcode für 2 MHz Main Clock und 10 kHz Output am PA3 (Pin 7):

1
     ATtiny412/402/212/202
2

3
     VDD 1|‾‾‾‾‾‾‾|8 GND 
4
     PA6 2|       |7 PA3 / TCA0 WO0 ----> 10 kHz
5
     PA7 3|       |6 UPDI 
6
     PA1 4|_______|5 PA2
7

8
  500 kHz / 25 / 2 = 10 kHz
1
#include <avr/io.h>
2

3
int main(void)
4
{
5
  _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, CLKCTRL_PDIV_10X_gc | CLKCTRL_PEN_bm);   // 2 MHz Main Clock
6

7
  TCA0.SINGLE.CTRLB = TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_WGMODE_FRQ_gc;         // TCA Frequency Mode
8
  TCA0.SINGLE.CMP0 = 24;                                                       // (25-1)
9
  TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV4_gc  | TCA_SINGLE_ENABLE_bm;        // 500 kHz TCA Clock, start timer
10

11
  PORTA.DIRSET = PIN3_bm;                                                      // PA3 output
12
  
13
  while(1)
14
  {
15
  
16
  }
17
}
Angehängte Dateien:
OP

Ich habe das Problem gefunden: Es scheint eine sehr schlechte Idee gewesen zu sein, einfach den von DeepSeek vorgeschlagenen Code zu übernehmen, da er die Main- Funktion überschreibt. Wenn ich meinen Code umschreibe, sodass ich keine Main-Funktion definiere und nur die Setup- und Loop-Funktionen verwende, funktioniert alles gut. Es scheint, als ob die Standard-Main-Funktion etwas mehr tut, als nur „Setup“ aufzurufen und dann wiederholt die loop-Funktion aufzurufen. wahrscheinlich irgendwas mit dem Prescaler..

Gast

Hi ISET,

ich würde vorschlagen, den von KIs gelieferten Antworten nicht blind zu vertrauen und deren Ergebnisse nicht unkontrolliert zu verwenden. (ich dachte, das sein inzwischen allgemein bekannt!? (*)) ;-)

(*) Ich verwende auch sehr gerne KIs, und es bringt mich sehr schnell weiter, wenn ich mich in ein neues Thema einarbeiten will. Ich habe dann schnell Lösungs- bzw. Anwendungswege. Allerdings funktionieren die meisten Code-Beispiele nicht oder lassen sich gar nicht erst fehlerfrei übersetzen.

ciao

Marci

IrgendSoEinTyp I. schrieb:

Ich werde wohl einfach aufhören main-Funktionen zu verwenden wenn ich die Arduino IDE verwende.

Richtig, wenn du die main()-Funktion von Arduino verwenden willst, ist es keine gute Idee, sie durch eine eigene zu überschreiben.

Es scheint, als ob die Standard-Main-Funktion etwas mehr tut, als nur „Setup“ aufzurufen und dann wiederholt die loop-Funktion aufzurufen.

Warum guckst du dir in main.cpp nicht an, was in der main()-Funktion von Arduino passiert?

Apropos 433MHz OOK. Soviel ich weiß, ist bei dieser Funkkommunikation auch die Null ein Signal und nicht nichts. Zumindest bei den Funksteckdosen ist es so. Aber das wäre schon ein Thema für das Forum "HF, Funk und Felder".

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über ein Jahr alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.