Holger Lambertus
User
Hallo Maccl
Das ist der Ukranduit-MPP, auch auf dem Attiny85. Ich finde es toll was er da macht, vor allem da er vielen Flugkollegen dort mit einer einfachen Lösung hilft. Der Attiny85 hat leider nur die 2x8Bit Timer. Die PWM ist dort 8Bit, 256Steps, da PPM 1-2mS davon die Hälfte, und die Randbereiche weg, ergeben sich etwa 100Regelschritte Auflösung, und der Arbeitspunkt wird manuel in der Software eingestellt. In dem ausgehendem Thread hatte ich eine 85er Soft gebastelt, 9Bit PWM, hat dann ca. 200Schritte Auflösung, und der MPP Arbeitspunkt ist vom Sender her per Gasknüppel wählbar.
Bei dem ÚSBtiny werkelt da ein Attiny44 mit 16Bit PWM, der die volle Auflösung des Reglers nutzt, die meisten Regler können 800Steps.
32u4 8MHz
Ich hatte gestern ein bissl Zeit, und mal mit dem 32u4 Hott inkl dem PPM.Passthrough gespielt, Hott funzt soweit, Uart ist nicht so mein Ding, das geht bestimmt auch besser (weniger Blähcode in der ISR), ich stelle das mal unausgegoren und nur teil kommentiert hier rein, die Tage teste ich das mal ausgiebig.
Diese Boards kosten auch um die 3-4€ in der Bucht, man kann den USB im "Vollbetrieb" weiternutzen, z.B. zum debug, oder evtl später Parameter per SerialTerm einzugeben, u.s.w. der 32u4 ist ungeahnter Luxus für mich, wenn nur diese blöde Arduino-IDE damit nicht wäre (nur damit rennt der stabil, irgendwas scheine ich im C zu missachten).
Für die 3,3V Version sprechen auch 5mA statt 15mA Stromverbrauch.
Funktioniert auch ohne Hott, also quasi universell. Jeti u.s.w. habe ich keine Aktien dran, das müsste dann wer anders einbauen.
Wenn die Tage noch ein bissl Zeit finde, setze ich mich da noch bei den Feinheiten mal bei. Danach können ans sich schon die MPP-Routinen drauf.
Für den "Anwender" wäre es zumindest sehr einfach, Arduino-IDE installieren, UBS-Kabel einstöpseln, Code (Datei) öffnen, auf den Pfeil drücken, fettich
Ich würde es als "Universalboard" so in Raum werfen ?!? (Wir, also das Board und Ich, hatten anfangs so unsere gewissen Differenzen, sind mittlerweile aber dann doch noch Freunde geworden )
Irgendwie werde ich das Bild unten im Beitrag nicht los ??
Das ist der Ukranduit-MPP, auch auf dem Attiny85. Ich finde es toll was er da macht, vor allem da er vielen Flugkollegen dort mit einer einfachen Lösung hilft. Der Attiny85 hat leider nur die 2x8Bit Timer. Die PWM ist dort 8Bit, 256Steps, da PPM 1-2mS davon die Hälfte, und die Randbereiche weg, ergeben sich etwa 100Regelschritte Auflösung, und der Arbeitspunkt wird manuel in der Software eingestellt. In dem ausgehendem Thread hatte ich eine 85er Soft gebastelt, 9Bit PWM, hat dann ca. 200Schritte Auflösung, und der MPP Arbeitspunkt ist vom Sender her per Gasknüppel wählbar.
Bei dem ÚSBtiny werkelt da ein Attiny44 mit 16Bit PWM, der die volle Auflösung des Reglers nutzt, die meisten Regler können 800Steps.
32u4 8MHz
Ich hatte gestern ein bissl Zeit, und mal mit dem 32u4 Hott inkl dem PPM.Passthrough gespielt, Hott funzt soweit, Uart ist nicht so mein Ding, das geht bestimmt auch besser (weniger Blähcode in der ISR), ich stelle das mal unausgegoren und nur teil kommentiert hier rein, die Tage teste ich das mal ausgiebig.
Diese Boards kosten auch um die 3-4€ in der Bucht, man kann den USB im "Vollbetrieb" weiternutzen, z.B. zum debug, oder evtl später Parameter per SerialTerm einzugeben, u.s.w. der 32u4 ist ungeahnter Luxus für mich, wenn nur diese blöde Arduino-IDE damit nicht wäre (nur damit rennt der stabil, irgendwas scheine ich im C zu missachten).
Für die 3,3V Version sprechen auch 5mA statt 15mA Stromverbrauch.
Funktioniert auch ohne Hott, also quasi universell. Jeti u.s.w. habe ich keine Aktien dran, das müsste dann wer anders einbauen.
Wenn die Tage noch ein bissl Zeit finde, setze ich mich da noch bei den Feinheiten mal bei. Danach können ans sich schon die MPP-Routinen drauf.
Für den "Anwender" wäre es zumindest sehr einfach, Arduino-IDE installieren, UBS-Kabel einstöpseln, Code (Datei) öffnen, auf den Pfeil drücken, fettich
Ich würde es als "Universalboard" so in Raum werfen ?!? (Wir, also das Board und Ich, hatten anfangs so unsere gewissen Differenzen, sind mittlerweile aber dann doch noch Freunde geworden )
Code:
// Testroutine für das 8MHz 3,3V Arduinoboard mit dem 32u4 MCU. Nächster Schritt: Eingelesene PPM vom Empf. wird mit 500Hz an den
// Regler weitergeleitet, als Drehzahl im Hottsender angezeigt, und auf dem Arduino Serialmonitor ausgegeben.
// In der IDE bitte "Lilipad Arduino USB" benutzen. Der Code funktioniert ausschließlich auf einem 8MHz 32u4-Board !
// Regler -- D9
// RC-Kanal -- D2 + D3 (beide!!)
// Hott-T -- D0(Rx) + über einen 1,2K Widerstand nach D1(Tx)
volatile uint8_t count;
volatile uint8_t HOTT[45] = {0x7C,0x8D,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0x00};
void setup() {
UBRR1L = 0b00011001; // HOTT-UART wird auf 19200baud konfiguriert
UCSR1B = 0b10011000; // Hott-RX+TX Interruptsteuerung wird aktiviert
TIMSK4 = 0b01000000; // Hott-Delay-Timer Comperator A als ISR aktiviert
TCCR4B = 0b00000000; // Hott-Delay-Timer stoppen, falls kein Hott verwendet wird
DDRB |= 0b00100000; // Read RC
EICRA = 0b00001011; // Read RC // INT1=falling INT0=rising
EIMSK = 0b00000011; // Read RC
TCCR3A = 0b00000000; // Read RC
TCCR3B = 0b00000010; // Read RC
TCCR1A = 0b10000010; // PPM_OUT
TCCR1B = 0b00011010; // PPM_OUT
ICR1 = 2000; // PPM_OUT
sei();
}
void loop() {
// Serial.begin(19200); Serial.println( HOTT[28]); Serial.end();
HOTT[28]++;
}
ISR(INT0_vect){ TCNT3 = 0b00000000;} // Read RC rising edge, der Timer wird genullt
ISR(INT1_vect){ OCR1A = TCNT3; } // Read RC falling edge, der Timer wird ausgewertet
// -----------HOTT-ISR-Routinen--------------------------//
ISR(USART1_RX_vect){
if (UDR1 == 0b10001101) // Hott-GAM hat nach Daten gerufen, Senderoutine wird gestartet:
{ UCSR1B = 0b00001000; // Hott-RX-Interrupt wird während der Senderoutine gesperrt,
HOTT[44] = 0b00000000; // Hott-Checksum auf Null stellen,
count = 0b00000000; // Hott-Byte-Counter auf Null stellen,
TCNT4 = 0b00000000; // Hott-Delay-Timer auf Null stellen,
OCR4A = 0b10011110; // Hott-Delay-Timer auf 5 mS stellen,
TCCR4B = 0b00001001; // Hott-Delay-Timer starten.
}}
ISR(TIMER4_COMPA_vect){
if (count > 0b00101101) // Wenn alle Bytes gesendet sind
{ TCCR4B = 0b00000000; // Hott-Delay-Timer stoppen
UCSR1B = 0b10011000; // Hott-RX-Interrupt wieder aktivieren
}else{
HOTT[44] = HOTT[44] + HOTT[count]; // Hott-Checksum bauen //while (!(UCSR1A & (1<<UDRE1))){}
UDR1 = HOTT[count]; // Hott-Byte aktuell schreiben
TCNT4 = 0b00000000; // Hott-Delay-Timer auf Null stellen
OCR4A = 0b00111111; // Hott-Delay-Timer auf 2 mS stellen
count++;
}}
Irgendwie werde ich das Bild unten im Beitrag nicht los ??