Programmierung
Desktopanwendungen entwickle ich bevorzugt mit Qt, Delphi / Turbo Pascal oder Visual Basic.
Ich behersche u.a. die Programmiersprachen: C/C++, Turbo Pascal, Visual Basic, Assembler,
die HW-Beschreibungssprachen: ABEL, VHDL,
die Scriptsprachen: Phyton, PHP, Java Script / AJAX,
die Auszeichnungssprachen HTML 4.01 & XHTML strict.
Windows Desktop Anwendungen:
- Sicheres Löschen von Daten Final Destroy- Digitale Modellbahn Steuerung SRCP-Client zum Steuern von Digital Lokomotiven ohne Interface
- HDD Anti Spin Down Download Die .exe Datei in den Autostartordner kopieren, Laufwerke auswählen, Fertig.
ACHTUNG: Durch herunterladen und ausführen der Dateien erkennen Sie an, das ich keinerlei Haftung für etwaige durch den Gebrauch der Software entstandenen Schäden übernehme!
Schnittstellen Tools
- Hidden Capture SocketQT Klassen
- QT Klasse zur Kapselung von QSettingsAVR GCC C CODE Excerpts
Eigentlich triviale Dinge, die man aber nicht gleich immer griffbereit hat...
AVR ATMEGA 32 / 16 @ 8 MHZ: 8 Bit ADC Routine
ADCSRA = 0b10000110; // AD eingeschaltet, jetzt nicht messen,no autotrigger,int,intflag,inten,prescaler 64 ADMUX = 0b00100000; // Vcc als Vref, höchstwertigste Bits, und unsym. ADC 0 als Eingang unsigned char get_adc_value(unsigned char pin) { ADMUX &= 0b11100000; // ADC0 ADMUX |= pin; // auf gewünschten Eingang schalten 0-7 ADCSRA |= (1<<ADSC); // starten while (ADCSRA & (1<<ADSC) ) { ; } //warten bis Messung fertig ist return ADCH; }
AVR ATMEGA / ATTINY: 8 Bit Schieberegister
z.B. an PORTC (Ser Pin 5, CLK Pin 6, Latch Pin 7)
volatile char shift_out = 0; // 8 Bit Schieberegister Datum void refresh_shift() { for (int s_bits = 0; s_bits <= 7; s_bits++) // 8 Bits { //Current Ser Bit if ((shift_out & (1 << s_bits)) != 0) { sbi(PORTC,5); } else { cbi(PORTC,5); } // CLK an /aus sbi(PORTC,6); cbi(PORTC,6); } // Latch AN / AUS sbi(PORTC,7); cbi(PORTC,7); }
AVR ATMEGA / ATTINY: sbi , cbi , check Makros
macht den Code doch gleich viel übersichtlicher... (sbi(Y,X); Pin Y an Register X setzen; cbi(X,Y); ...löschen)
// good old sbi / cbi #define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT))) #define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT))) // toggle Bit #define toggle(ADDRESS,BIT) ((ADDRESS) ^= (1<<(BIT))) // check Bit #define check(ADDRESS,BIT) ((ADDRESS) & (1<<BIT))
General Purpose C CODE Excerpts
Tiefpassfilter
kann z.B. wunderbar zum Entprellen von Tastern genutzt werden (Taster gedrückt -> New_Value = 10 / sonts New_Value = 0...
k ist der Tiefpassfaktor, d.h. nach k Schritten und einem konstanten New_Value ist der Ausgangswert 3dB von New_Value (ca. 75%).
// Tiefpass #define k 3; // k als Konstante definiert float TPsum = 0; // TPsum enthät den aktuellen Wert des Tiefpasses float New_Value = 2; // aktueller Wert für diesen Schritt TPsum += (New_Value - TPsum)/k;
General Purpose Java-Script Excerpts
Übergabe eines Funktionszeigers mit Parametern
Möchte man einen Funktionspointer ohne zusätzliche Parameter übergeben ist dies in JS relativ einfach:
var foo = function(){ alert(val_xyz); }; document.getElementById(something).onclick = foo; // ohne () da die Funktion sonst aufgerufen wirdMöchte man nun jedoch noch zusätzlich einen Parameter übergeben ist die Lösung nicht ganz offensichtlich:
var foo = function(val_xyz){ alert(val_xyz); }; var XYZ = 42; document.getElementById(something).onclick = (function (XYZ) {return function() {foo(XYZ);} })(XYZ)
Submit eines Formulars verhindern
Möchte man ein Formular z.B. per AJAX verabeiten, und zeitgleich eine Fallbacklösung ohne JS haben funktioniert dies wie folgt:
<form action="post_xy.php" method="POST" id="xyz"> <button type="submit" onClick="return sub_form('xyz');" name="sb" value="bt" >ABSENDEN</button> </form>Die zugehörige JS Funktion kann dann wie folgt aussehen:
function sub_form(ajax_link, form_id) { // Auswertung // ... return false; // Submit verhindern }Wichtig dabei ist das 'return' im onClick Aufruf und dass kein onSubmit verwendet werden darf.
Kleinigkeiten am Rande / Knowledge
CAN Frames
Die Byte Anordnung (z.B. bei 16 Bit Werten) ist innerhalb eines Telegramms invers: Byte0 -> Low Byte | Byte1 -> High Byte
Das Low Byte wird zuerst übertragen.
GET Parameter bei MOD REWRITE Rules
[QSA,L] an das Ende jeder Umleitung anhängen.