Projekte
BirgerT
nibo2_fork#01
bt_lib_utils.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_fork#01
BSD_license.h
bt_lib_debugutil.c
bt_lib_debugutil.h
bt_lib_glcd.c
bt_lib_glcd.h
bt_lib_grafix.c
bt_lib_grafix.h
bt_lib_terminal.c
bt_lib_terminal.h
bt_lib_uart.c
bt_lib_uart.h
bt_lib_utils.h
lumpylumpy.h
main.c
nibo2_audio.c
nibo2_audio.h
nibo2_copro.c
nibo2_copro.h
nibo2_copro_cmd.h
nibo2_font.h
nibo2_global.h
nibo2_main_menu.h
nibo2_pwm_leds.c
nibo2_pwm_leds.h
nibo2_register.c
nibo2_register.h
nibo2_sensors.c
nibo2_sensors.h
test_debugutil.h
test_gfx_draw.h
xmas1.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
7426 private projects
385 public projects
16180353 lines compiled
58212 builds
NIBO
@
nibo2_fork_01/bt_lib_utils.h [read only]
////////////////////////////////////////////////////////////////////////// // // BT LIB UTILS == AVR MEGA Makros und Typen und so // // (c) Birger Töpelmann toepelmann(A)web.de Version 141008a // // Zum Testen der Funktionen, Programme, Speicherinhalte und Timings // von AT-Mega MCU im Zielsystem über die serielle Schnittstelle und // mit einem (VT100/ANSI) Terminalprogramm auf dem PC. // // // // TODO: - Typedefs // Word, Byte und Flags testen und Funktionen Updaten // // - Datei aufräumen // // ////////////////////////////////////////////////////////////////////////// // // BSD License see "BSD_license.h" // #include "BSD_license.h" // #ifndef _BTLIB_UTILS_H_ #define _BTLIB_UTILS_H_ // // BirgerT AVR MCU Bibliotheken (en Bloc in neue Programmodule übernehmen) // //#include "bt_lib_utils.h" // Sammlung von Makros und Typedefs //#include "bt_lib_uart.h" // UART Kommunikation mit FIFOs //#include "bt_lib_terminal.h" // Mensch Mikrocontroller Kommunikation //#include "bt_lib_debugutil.h" // Memory Dump, Laufzeitmessung // // ////////////////////////////////////////////////// notwendige Headerfiles ////////////////////////////////////////////////////////////////////////// // #include <stdlib.h> // Fließkommazahl in Zeichenkette #include <string.h> // Zeichenketten #include <stdio.h> // sprintf #include <stdarg.h> // va_list // ///////////////////////////////////////////////////////////// AVR Header // #include <avr/io.h> // ATmega128 /* in avr/io.h sind die Namen der Special Function Registers SFR definiert. Die Namen der SFR werden im AVR Studio auch im Fenster "I/O View" angezeigt. Die SFR sind alle als volatile (= flüchtig) Variablen (char, int) deklariert, d.h. dass die Lese- und Schreibzugriffe vom Compiler nicht wegoptimiert werden. Beim Setzen oder Löschen einzelner Bits muss man unterscheiden, ob das ganze Register (über-)schreibt, oder nur einzelne Bit. DDRC = 0xFF; // PORTC alle PINs als OUTPUT PORTC = 0x0F; // überschreibt setzt alle Bits in Port C // PORTC enthält Bitmuster 00001111 PORTC = 0xF0; // überschreibt setzt alle Bits in Port C // PORTC enthält Bitmuster 11110000 PORTC |= ((1<<PC2) | (1<<PC1); // zwei Bits setzen // PORTC enthält Bitmuster 11110110 PORTC &= ~((1<<PC5) | (1<<PC7)); // zwei Bits löschen // PORTC enthält Bitmuster 01010110 DDR.. ist das Data Direction Register (IN bei 0, Out bei 1) PORT. ist das Register zum Setzen der Ausgänge PIN.. dient zum Lesen der Eingabebits In ein als Eingang geschaltetes IO Bit eine 1 schreiben aktiviert den internen Pullup Widerstand - deaktivieren entsprechend mit 0. Beispiel für Taster an PIND4: DDRD &= ~(1<<PD4) // Löschen DDR Bit = Eingang PORTD |= (1<<PD4) // Setzen des Portbits = Pullup ein Eingänge mit Pullup sind im offenen Zustand 1, ein Kontakt (Taster) verbindet den Eingang mit GND -> Zustand 0 if(!(PIND & (1<<PIND4)) // SW3 wird gedrückt */ #include <avr/interrupt.h> // Interrupts #include <avr/pgmspace.h> // FLASH #include <avr/eeprom.h> // EEPROM #include <util/delay.h> // kurze Pausen // Verzögerung um us(max 48) Mikrosekunden // us = float Mikrosekunden #define delay_us(us) _delay_us(us) // //////////////////////////////////////////////////////// DEFINES & MAKROS ////////////////////////////////////////////////////////////////////////// // // ACHTUNG: // // Defines werden vom PreCompiler 1:1 in den Quelltext übersetzt, // d.h. ein '#define TESTWERT 5*20' wird nicht berechnet; // // if(wert == TESTWERT) -> ergibt if(wert == 5*20) // und NICHT if(wert == 100) // // die korrekte Definition von Wahr und Falsch? #define TRUE (1==1) #define FALSE (1==0) // #define NOP __asm volatile ("nop") // //////////////////////////////////////////////////////// BIT MANIPULATION // // ACHTUNG: // Bitnummer möglichst immer als Konstante übergeben, // bei Variablen werden die Bitpositionen im Programm berechnet. // // // SetBit(Port/Variable,BitNr) Bit #b in Variable p setzen =1 #define SETBIT(p,b) (p) |= (uint8_t)(1<<b) // // ClrBit(Port/Variable,BitNr) Bit #b in Variable p loeschen =0 #define CLRBIT(p,b) (p) &= ~(uint8_t)(1<<b) // // InvBit(Port/Variable,BitNr) Bit #b in Variable p toggeln/invertieren #define INVBIT(p,b) (p) ^= (uint8_t)(1<<b) // // GetBit(Port/Char,BitNr) Bit #b in Variable p abfragen // Return 0 == Bit geloescht, Return 1 == Bit gesetzt #define GETBIT(p,b) (uint8_t)(((p) >> (b)) & 1) // // TstBit(Port/Char,BitNr) Bit #b in Variable p abfragen // Return True == Bit ist gesetzt #define TSTBIT(p,b) (( (p) & (uint8_t)(1 << (b))) !=0) // ////////////////////////////////////////////////////////// BYTES und WORDS // #define LOBYTE(x) (uint8_t)((uint16_t)x) #define HIBYTE(x) (uint8_t)(((uint16_t)x)>>8) #define TOWORD(hi,lo) ((hi*0x100)+lo) // //////////////////////////////////////////////////////////////// TYPEDEFS ////////////////////////////////////////////////////////////////////////// // // Bitfield Array für Einzelbitabfrage // struct _byte_s { uint8_t b0 :1; uint8_t b1 :1; uint8_t b2 :1; uint8_t b3 :1; uint8_t b4 :1; uint8_t b5 :1; uint8_t b6 :1; uint8_t b7 :1; } __attribute__((packed)); typedef struct _byte_s byte_t; #define FLAG(f,n) (((volatile struct byte_t *)&f)->f##n) typedef union { uint16_t X; byte_t L; byte_t H; } word_t; // ////////////////////////////////////////////////////////////////////////// // // Zeiger auf eine Funktion definieren // typedef void(* fn_Pointer_t)(void); // // Funktionen sollen überZeiger aufgerufen werden // // func_to_call_1(){;} // func_to_call_2(){;} // func_to_call_3(){;} // // ein Array mit den Adressen der Funktionen // // fn_Pointer_t functions[] = { // &func_to_call_1, &func_to_call_2, &func_to_call_3, 0 }; // // der Funktionsaufruf // // uint8_t function_number = 1; // fn_Pointer_t call_function = functions[function_number]; // // Check und Call func_to_call_2() // if (call_function != 0) { call_function(); } // // ////////////////////////////////////////////////////////////////////////// // // ////////////////////////////////////////////////////////////////////////// // #endif //_BTLIB__H_ // EOF
Compiler results:
Werbung
Online
candidaharrell99753
leonelb389687792836
nelsonleeson85120051
Rob98
ruebenmendes25697
warrenhinder6456
wilfredocastillo