Projekte
BirgerT
nibo2_Birger_01
nibo2_pwm_leds.h
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
nibo2_Birger_01
blib_utils.c
blib_utils.h
BSD_license.h
nibo2_global.h
nibo2_main.c
nibo2_main_01.h
nibo2_pwm_leds.c
nibo2_pwm_leds.h
nibo2_sensors.c
nibo2_sensors.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7427 private projects
385 public projects
16181052 lines compiled
58220 builds
NIBO
@
nibo2_birger_1/nibo2_pwm_leds.h [read only]
////////////////////////////////////////////////////////////////////////// // // NIBO2 PWM LEDS // // TIMER 1 als Systemzeitgeber 1ms und als PWM Generator für die LEDs // // uint8_t pwm.pwmA = Headlights 0..100% // uint8_t pwm.pwmB = LCD Backlight 0..100% // uint8_t pwm.pwmC = Duo LEDs 0..100% // // Systemzeitgeber 1ms in der Overflow ISR // // uint8_t pwm.cycle = ms Zähler für main_zyklus (sh. main.c) // uint16_t pwm.ms = milliSekunden Zähler 0..1000 // uint16_t pwm.sec = Sekundenzähler 0..65535 // // die Variablen in der struct pwm sind Global, Zugriff direkt // oder über Funktionen (siehe Prototypen) // // In die OVF ISR können bis zu 10 Funktionen eingehängt werden: // // Bei jedem 1ms Interrupt wird nur eine der eingehängten Funktionen // aufgerufen; jede Funktion wird alle 10ms wiederholt aufgerufen: // - Soundausgabe // - Trigger ADC Linien- und Bodensensoren absolut (ohne IR) // - Trigger ADC Linien- und Bodensensoren relativ (mit IR) // - LED Stroboskop // // PORTC Duo LEDs Grün // PORTE Duo LEDs Rot // ////////////////////////////////////////////////////////////////////////// // // BSD License see "license.h" #include "BSD_license.h" // #ifndef _NIBO2_PWM_LEDS_H_ #define _NIBO2_PWM_LEDS_H_ // #include "nibo2_global.h" // Nibo2 Global Header // #ifdef __cplusplus extern "C" { #endif // PWM TIMER 2 Variablen als Struktur für schnellen Zugriff typedef struct{ uint16_t ms; // milliSekundenzähler (0..999) uint8_t sec; // Sekundenzähler (0..59) uint8_t min; // Minutenzähler (0..255) // Variablen für Main_Zyklus uint8_t slast; // Sekunden beim letzten Durchlauf uint8_t sec_tick; // Sekundentakt uint8_t cycle; // milliSekunden für MainLoop Zyklus uint8_t cmax; // Merker Mainloopdauer Max. ms uint8_t cmain; // Merker Mainloopdauer in ms uint8_t clast; // Merker Mainloop + Updates in main_zyklus // uint8_t pwmA; // Vorgabe PWM A Headlight Intensität uint8_t pwmB; // Vorgabe PWM B LCD LED Intensität uint8_t pwmC; // Vorgabe PWM C DuoLEDs Intensität } pwm_t; extern volatile pwm_t pwm; // // ============================================= PROTOTYPEN // void pwmleds_init(); // Init Timer und Ports //void delay_ms(uint8_t ms) __attribute__((always_inline)); void delay_ms(uint8_t ms); // Blockierendes Delay // // Lese Millisekunden / Sekunden mit CLI() und SEI() // uint16_t pwm_get_ms(); uint16_t pwm_get_sec(); // // Helligkeit/Intensität der LEDs setzen oder abfragen // -> uint8_t val = 0..100%; ist val > 100 // wird kein Wert gesetzt - für Abfrage // <- uint8_t aktueller PWM Wert 0..100% // uint8_t pwm_head(uint8_t val); // Headlights uint8_t pwm_lcd(uint8_t val); // LCD Backlight uint8_t pwm_leds(uint8_t val); // Duo LEDs // // Direkte LED Port Zugriffe für Debugging // // LED_SET(LED_RD,2); // Led linke Seite rot ein // LED_SET(LED_GN,7); // Led rechte Seite grün ein // if(LED_TST(LED_RD,2)).. // wenn Led links rot // // LED_SET(LED_GN/LED_RD,LedNr) Led einschalten #define LED_SET(p,b) (p) |= (uint8_t)(1<<b) // // LED_CLR(LED_GN/LED_RD,LedNr) Led ausschalten #define LED_CLR(p,b) (p) &= ~(uint8_t)(1<<b) // // LED_INV(LED_GN/LED_RD,LedNr) Led umschalten #define LED_INV(p,b) (p) ^= (uint8_t)(1<<b) // // LED_TST(LED_GN/LED_RD,LedNr) Led Zustand abfragen // <- True == LED ist eingeschaltet #define LED_TST(p,b) (( (p) & (uint8_t)(1 << (b))) !=0) // LED Defs für Debugging // Wenn vergessen wurde, wo diese überall eingesetzt sind, #if 1 // das "#IF" auf "0" setzen und die Fehlermeldungen des // Compilers abarbeiten. #define L0G1 LED_SET(LED_GN,0) #define L0G0 LED_CLR(LED_GN,0) #define L0GI LED_INV(LED_GN,0) #define L1G1 LED_SET(LED_GN,1) #define L1G0 LED_CLR(LED_GN,1) #define L1GI LED_INV(LED_GN,1) #define L2G1 LED_SET(LED_GN,2) #define L2G0 LED_CLR(LED_GN,2) #define L2GI LED_INV(LED_GN,2) #define L3G1 LED_SET(LED_GN,3) #define L3G0 LED_CLR(LED_GN,3) #define L3GI LED_INV(LED_GN,3) #define L4G1 LED_SET(LED_GN,4) #define L4G0 LED_CLR(LED_GN,4) #define L4GI LED_INV(LED_GN,4) #define L5G1 LED_SET(LED_GN,5) #define L5G0 LED_CLR(LED_GN,5) #define L5GI LED_INV(LED_GN,5) #define L6G1 LED_SET(LED_GN,6) #define L6G0 LED_CLR(LED_GN,6) #define L6GI LED_INV(LED_GN,6) #define L7G1 LED_SET(LED_GN,7) #define L7G0 LED_CLR(LED_GN,7) #define L7GI LED_INV(LED_GN,7) #define L0R1 LED_SET(LED_RD,0) #define L0R0 LED_CLR(LED_RD,0) #define L0RI LED_INV(LED_RD,0) #define L1R1 LED_SET(LED_RD,1) #define L1R0 LED_CLR(LED_RD,1) #define L1RI LED_INV(LED_RD,1) #define L2R1 LED_SET(LED_RD,2) #define L2R0 LED_CLR(LED_RD,2) #define L2RI LED_INV(LED_RD,2) #define L3R1 LED_SET(LED_RD,3) #define L3R0 LED_CLR(LED_RD,3) #define L3RI LED_INV(LED_RD,3) #define L4R1 LED_SET(LED_RD,4) #define L4R0 LED_CLR(LED_RD,4) #define L4RI LED_INV(LED_RD,4) #define L5R1 LED_SET(LED_RD,5) #define L5R0 LED_CLR(LED_RD,5) #define L5RI LED_INV(LED_RD,5) #define L6R1 LED_SET(LED_RD,6) #define L6R0 LED_CLR(LED_RD,6) #define L6RI LED_INV(LED_RD,6) #define L7R1 LED_SET(LED_RD,7) #define L7R0 LED_CLR(LED_RD,7) #define L7RI LED_INV(LED_RD,7) #endif ////////////////////////////////////////////////////////////////////////// // // Zeiger auf eine Funktion definieren // typedef void(* fn_Pointer_t)(void); // in bt_lib_utils // // pwm_add_fn Eine Funktion in den 1ms Interrupt einhängen // -> Adresse der aufzurufenden Funktion // <- Index des Eintrags in Task Tabelle // oder -1, wenn Eintrag nicht möglich. // // pwm_del_fn Die Funktion mit tasknr wieder aushängen // -> Index des Eintrags in der Task Tabelle // uint8_t pwm_add_fn(fn_Pointer_t task ); void pwm_del_fn(uint8_t tasknr); // // BEISPIEL /* static uint8_t leds_task = 0; // Merker für Tasknummer void pwm_leds_isrfn(){;} // Funktion die eingehängt werden soll leds_task = pwm_add_fn(&pwm_leds_isrfn); // Funktion einhängen // pwm_leds_isrfn wird alle 10ms aufgerufen pwm_del_fn(leds_task); // Funktion wieder aushängen // pwm_leds_isrfn wird nicht mehr aufgerufen */ #ifdef __cplusplus } // extern "C" #endif #endif //_NIBO2_PWM_LEDS_H_
Compiler results:
Werbung
Online
adellreinoso82318550
Bogdanasf
josch
magvaf
paulinegonsalves19
randalspann5740
wadehirsch7523292
workwind