AskSinAnalyzer mit ATMega32U4

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
EddyS
Beiträge: 10
Registriert: 15.11.2020, 09:10
System: CCU
Danksagung erhalten: 2 Mal

AskSinAnalyzer mit ATMega32U4

Beitrag von EddyS » 02.07.2021, 17:38

Ich habe mir ein
Pro Micro kompatibel ATmega32U4 3,3V Micro USB Board Arduino 8MHz Leonardo
in der Bucht gekauft und habe mich daran gemacht AskSin++ soweit anzupassen das ich in PlatformIO das Projekt übersetzen konnte.
Es wurde nur in folgende Dateien änderunge eingefügt: Activity.h, AlarmClock.h und PhaseCut.cpp.
Serialport und Timer2 in Timer0 geändert sowie die Register dazu mussten angepasst werde.

Verdahtung ATMega32U4 mit CC1101 ist:

Code: Alles auswählen

Radio CC1101	<-->	ATMega32U4 pro Micro
-------------------------------------------------------------
3v3		<-->	VCC
GND		<-->	GND
SI		<-->	PIN16
SCLK		<-->	PIN15
SO		<-->	PIN14
GDO2
GDO0		<-->	PIN3 (INT0) 
CSN		<-->	PIN10
Im Projekt habe ich dann CC1101 so eingebunden:

Code: Alles auswählen

...  
#define CC1101_GDO0_PIN     3     // PD0
#define CC1101_CS_PIN       10    // PB6
#define CC1101_MOSI_PIN     16    // PB2
#define CC1101_MISO_PIN     14    // PB3
#define CC1101_SCK_PIN      15    // PB1
// Pro Mini LED
#define LED_PIN             4     // PD4
...
typedef AvrSPI<CC1101_CS_PIN, CC1101_MOSI_PIN, CC1101_MISO_PIN, CC1101_SCK_PIN> RadioSPI;
typedef Radio<RadioSPI, CC1101_GDO0_PIN> RadioType;
typedef StatusLed<LED_PIN> LedType;
typedef AskSin<LedType,NoBattery,RadioType> HalType;
...
Habe das ganze Projekt für PlatformIO mal als ZIP angehangen.
Ich denke das man die Vorlage auch für andere Projkte nutzen kann.

LG Eddy
Dateianhänge
Pro Micro_ATMega32U4_3.3V_8Mhz.png
AskSinSniffer_ATMega32U4_asksinpp_5.0.0.zip
PlatformIO-Projekt
(3.28 MiB) 50-mal heruntergeladen

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: AskSinAnalyzer mit ATMega32U4

Beitrag von TomMajor » 03.07.2021, 01:01

Nice work. :)
Zum Thema AskSinPP Support für den 32U4 gab es schon öfters Fragen und github issues.
Falls das sauber funktioniert, wäre da nicht ein PR im AskSinPP Repo eine tolle Sache um dort in Zukunft eine Supported MCU mehr zu haben 8)
Viele Grüße,
Tom

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: AskSinAnalyzer mit ATMega32U4

Beitrag von jp112sdl » 03.07.2021, 07:53

Ich versuch es grad zu verstehen.
EddyS hat geschrieben:
02.07.2021, 17:38
Timer2 in Timer0 geändert
Warum Timer2 in Timer0 und nicht in Timer3 oder Timer4?

Wird Timer0 nicht noch für andere Dinge innerhalb der AskSinPP verwendet?
Hab das grad noch gefunden:
viewtopic.php?f=76&t=59601&p=590626#p590591
https://github.com/pa-pa/AskSinPP/issue ... -647392344

Mag jetzt für den Sniffer keine Auswirkungen haben, jedoch evtl. bei einer generellen Implementierung in die Lib!?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

EddyS
Beiträge: 10
Registriert: 15.11.2020, 09:10
System: CCU
Danksagung erhalten: 2 Mal

Re: AskSinAnalyzer mit ATMega32U4

Beitrag von EddyS » 03.07.2021, 09:29

jp112sdl hat geschrieben:
03.07.2021, 07:53
Warum Timer2 in Timer0 und nicht in Timer3 oder Timer4?
Laut atmega32u4 Datenblatt ist :

16-bit Timers/Counters (Timer/Counter1 and Timer/Counter3)
10-bit High Speed Timer/Counter4
und
8-bit Timer/Counter0 with PWM

...der wird in der Lib benötigt.
jp112sdl hat geschrieben:
03.07.2021, 07:53

Wird Timer0 nicht noch für andere Dinge innerhalb der AskSinPP verwendet?

Mag jetzt für den Sniffer keine Auswirkungen haben, jedoch evtl. bei einer generellen Implementierung in die Lib!?
In der ganzen Lib habe ich keinen Eintrag für Timer0 gefunden.

Der einziger Unterschied, den ich gefunden habe, ist das der Timer0 kein "asynchronous mode" besitzt!

Code: Alles auswählen

#elif defined (__AVR_ATmega32U4__)
    TIMSK0  = 0;           //Disable timer2 interrupts
    //ASSR  = (1<<AS2);    //Enable asynchronous mode
    TCNT0 = 0;             //set initial counter value
    TCCR0A = 0;            // mode normal
    TCCR0B = (1<<CS02);    //set prescaller  ##256##
    //while (ASSR & ((1<<TCN2UB)|(1<<TCR2BUB))); //wait for registers update
    TIFR0  = (1<<TOV0);    //clear interrupt flags
    TIMSK0  = (1<<TOIE0);  //enable TOV2 interrupt

Register ASSR gibt es beim atmega32u4 nicht und bei der initialisierung musste ich den prescaler auf 256 stellen.
Prescaler 128, wie bei der initialisierung für die restlichen AVR, gibt es nicht.

... aber in PhaseCut.cpp wird sowieso ein anderer prescaler Faktor eingestellt.

Code: Alles auswählen

	void PhaseCut::ZeroCrossEvent()
	{
		if (!_valid_zero_crossing)
			return;
		_valid_zero_crossing = false;
		phaseCut.Fire();
		TCNT0 = 0;		// Restart counter (no need to call cli() inside an ISR)
		TCCR0B |= (1 << WGM01) | (1 << CS00) | (1 << CS02) ;	// Enable/start CTC and set prescaler to 1024
	}
Viele Grüße,
Eddy

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: AskSinAnalyzer mit ATMega32U4

Beitrag von TomMajor » 03.07.2021, 12:35

Dann haben wir beim U4 keinen 32kHz Quarz RTC Mode mehr oder? Weil dafür wird Timer2 ja auch verwendet.
Viele Grüße,
Tom

EddyS
Beiträge: 10
Registriert: 15.11.2020, 09:10
System: CCU
Danksagung erhalten: 2 Mal

Re: AskSinAnalyzer mit ATMega32U4

Beitrag von EddyS » 03.07.2021, 13:04

TomMajor hat geschrieben:
03.07.2021, 12:35
Dann haben wir beim U4 keinen 32kHz Quarz RTC Mode mehr oder? Weil dafür wird Timer2 ja auch verwendet.
Wurde im AlarmClock.h mit berücksichtigt/angepasst.
Habe es nicht ausprobiert, sollte aber funktionieren.

Habe bei mir im Projekt RTC deaktiviert

Code: Alles auswählen

#define NORTC       //* no RTC
aber auch mit RTC kommt jedenfalls kein Übersetzungsfehler. :D
Habe leider kein Projekt mit RTC um das mal auszuprobieren.

Die Anwendung macht eigendlich auch nur Sinn, wo man eine USB Schnittstelle benötigt wie beim AskSinAnalyzer.
7 Leitung sind da mal schnell verschaltet....
Vorher noch den FreqTest drüber laufen lassen... und läuft gut :P

Viele Grüße,
Eddy
Dateianhänge
20210703_125713.jpg

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: AskSinAnalyzer mit ATMega32U4

Beitrag von TomMajor » 03.07.2021, 13:43

EddyS hat geschrieben:
03.07.2021, 13:04

Wurde im AlarmClock.h mit berücksichtigt/angepasst.
Habe es nicht ausprobiert, sollte aber funktionieren.

Habe bei mir im Projekt RTC deaktiviert

Code: Alles auswählen

#define NORTC       //* no RTC
aber auch mit RTC kommt jedenfalls kein Übersetzungsfehler. :D
Habe leider kein Projekt mit RTC um das mal auszuprobieren.
ich wurde nur stutzig da du selber vorher geschrieben hast der asynchronous mode ist weg.
Hab mal schnell ins datasheet geschaut.
Power-save mode mit RTC wie wir es kennen vom mega328P geht nicht beim U4
7.4
Power-save Mode
When the SM2..0 bits are written to 011, the SLEEP instruction makes the MCU enter Power-save mode. For
compatibility reasons with AT90USB64/128 this mode is still present but since Timer 2 Asynchronous operation
is not present here, this mode is identical to Power-down.
D.h. es mag mit RTC compilieren ohne Fehler, aber funktionieren in der Praxis wird der 32kHz RTC Modus nicht.
Mag bei einem USB Gerät nicht wichtig sein, aber dann sollte man RTC beim U4 nicht als valid durchlassen in der AskSinPP, wäre imho das Sauberste.
Viele Grüße,
Tom

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“