-
Thread
Tastenentprellung
Tasten entprellten mit nem µC heißt nichts anderes als die Taste niemals schneller abfragen als die Prellzeit es erlaubt! MaWin schrieb im Beitrag #3070225: > Es können auch 50msec sein, denn niemand > drückt so schnell die
16KOhm]--[Taster]--((Gnd | | |-----------[ADµC So kannst du bis zur ADC-Auflösung minus 1 Taster gleichzeitig abfragen. Wenn du dich drauf beschränkst, einzelne Taster zu drücken, kannst du die Spannungsteiler auch beliebig dimensionieren, und
-
Thread
String-Ausgabe über UART funktioniert nicht bei PIC 18F
; // Flag löschen PIR1bits.TXIF=0; } [/c] Das ergibt als Ausgabe: "MCOHP." Sieht ganz so aus, als würde er jedes zweite Zeichen weglassen. Christian
Noch ein Versuch: void UART_Zeile_senden(char *zeile) { unsigned char c; // Solange senden, bis Stringende erreicht while((c = *zeile++)) { // Einzelnes Zeichen senden UART_Zeichen_senden(c); } }
-
Thread
SPI Flash programmieren
bytes gesendet werden, wird der Interrupt ausgelöst und die Programmierung erfolgt anhand folgender abfrage: [c] SFlash_Init(); //---------------modified for ext. Flash------------------------------------------------- switch(bl_GetDeviceType(ulStart)) { case
Hier der Anhang mit dem *.py script für das Bit-File. Fazit: Der Done-Pin ist der Monitor das der FPGA Chip das Bit-Stream via ext. SPI-PROM akzepiert hat. (Bit-Stream-CRC). Du hast ja auch das Bit-File via Hilfe von Impact u.JTAG durch den
-
Thread
Diskussion zum Artikel "Single Chip Frequenzumrichter" für den 2. MC Wettbewerb
define festlegt, sondern in den Projekteinstellungen. Du kannst das leicht hinzufügen, indem du per [c] #define F_CPU 16000000UL [/c] *vor* dem [c] #include util/delay.h [/c] die Frequenz mitteilst oder im Makefile ein '-DF_CPU 16000000' addierst. Die Fuses werden davon nicht beeinflusst,
Spimash schrieb im Beitrag #7693464: > sondern 256 256 ist ein Überlauf und passt nicht in ein 8-Bit OCR Register, da es 9 Bit lang wäre.
-
Thread
Bitte um Hilfe bei DS1307 Problem
< PB0); uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); //uart initialisieren i2c_init(); //i2c initialisieren //schreibe CH-Bit i2c_start_wait(DS1307+I2C_WRITE); i2c_write(0x81); i2c_stop(); //*schreibe CH Bit //CH Bit gesetzt? i2c_start_wait(DS1307+I2C_WRITE
seconds = bcdToDec((buffer & 0x7F)); _delay_ms(500); } } [/c] (1) Obwohl ich Anfang im Seconds Register zwangsweise das CH-Bit setze, scheint das Programm nicht in die If-Abfrage reinzugehen, um das Bit wieder zu löschen. (2) In seconds sollen ja jetzt die
-
Thread
Hilfe bei I2C (Peter Fleury)
doch nicht so oder? Der UART funktioniert. Habe ihn vorher getestet mit einem konstanten String: [c] uart_puts( "Hello World!\n" );[/c] Über ein Terminal kam auch im Sekundentakt Hello World! an. Also ich hatte einzeln zuerst das Blinken getestet (hat funktioniert), dann einzeln den UART und nun
received while(!(TWCR & (1<<TWINT))); // check value of TWI Status Register. Mask prescaler bits. twst = TW_STATUS & 0xF8; if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1; return 0; }/* i2c_start */ /***********************************************************
-
Thread
Absoluter Anfänger (ADC STK500)
IR-Abstandssensor der Fa. Sharp (GP2-1080K) über ein "STK500" Board mit "ATMega16" AVR digitalisieren und abfragen. Hierzu habe ich schon einige tutorials gelesen und auch schon einen kleinen Teil des Quellcodes geschrieben. Ich habe nur Sekunde das Problem, dass ich nicht weiss, wie die ermittelten werte über
(1<<ADATE) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1); sei(); while(1) { } } [/C] Momentan werden die Daten auf PORTC ausgegeben, möchte diese aber gern an die RS232 Schnittstelle übergeben und über Putty auslesen. Vielen Dank schon mal im voraus! Gruß, Daniel
-
Thread
anfänger bei assembler
Hallo, der Befehl "in" lädt ein ganzes Byte auf einmal, es ist also nicht möglich nur ein einzelnes Bit zu laden. Die Idee mit der Bitmaske ist hier schon richtig. Zusätzliche Informationen zu den einzelnen ASM Befehlen von Atmel findest du im Instruction Set http://www.atmel.com/images/doc0856
weiter: >andi temp1 , 0b00000010 ;testen ob PB1 gedrückt wurde Mit dem ersten 'andi' löschst du Bit 1. Also kann es bei der zweiten Abfrage nie 1 sein. MfG Spess
-
Thread
Suche: Steuerungsplatine mit Microcontroller USB
programmieren. Du musst ihn nur in den passenden IO-Modus schalten ("Bitbang") und kannst dann die Bits setzen und löschen oder abfragen. fchk
Facharbeit eine Platine die ich über Usb > programmieren kann und auch alle Steuerungen über eine C++ > grafikoberfläche ausführen kann. > Die Ventile für die einzelnen zutaten wollte ich halt per mausklick > über eine "Ausführende" Platine ansteuern. Das, was der TE schreibt, kann man selbstverständlich
-
Thread
einzelnes bit in c abfragen
Hi Leute, wie ist es in C möglich einzelne Bits einer selbstdefinierten Variable (int oder char) an meinem PIC abzufragen? Gruß Gerhard
gereicht hat, hier nochmal: [[Bitmanipulation]] http://www.mikrocontroller.net/search?query=einzelnes+bit+in+c+abfragen Du hättest auch einfach nur deinen Threadtitel in die Suche eintippen können, oder ein C-Buch in die Hand nehmen, oder ein Tutorial ansehen, oder einen anderen C-Quelltext, oder
-
Thread
_delay_ms(500) funktioniert nur sporadisch
sinnvoll, wenn Du den Code mal sauber strukturierst, indem Du ihn in kleinere Teile zerlegst und einzeln testest. Ich gebe Dir mal ein Grundgerüst vor, das ich für sinnvoll halte: main.c [c]#include "segment_display.h" #include "ir_receiver.h" #include <stdint.h> #include <util/delay.h> int
void); bool ir_receiver_data_received(void); uint32_t ir_receiver_get_data(void); #endif[/c] ir_receiver.c [c]#include "ir_receiver.h" #include <avr/io.h> #inlucde <avr/interrupt.h> enum { STATE_IDLE = 0, STATE_START_BIT_PULSE_RECEIVED, STATE_START_BIT_PAUSE_RECEIVED, STATE_DATA_BIT_PULSE_RECEIVED
-
Thread
Kuriose effekte beim beschreiben von EEprom 24C512
mehr woran es liegen könnte. Die Adresse zum beschreiben wird immer um 1 iteriert und als Word (16Bit) an das EEprom gesendet. Hier noch ein paar Ausschnitte aus meinem Code: [c] void eeprom_write(uint16_t addr, uint8_t val) { i2c_start_wait(Dev24C512+I2C_WRITE); //i2c_write( (addr/256
was ich möchte. Ich hoffe mal, dass wir nicht aneinander vorbeireden. Also zum schrieben: [c] i2c_start_wait(Dev24C512+I2C_WRITE); i2c_write((addr>>8)&0xFF); i2c_write(addr&0xFF); i2c_write(val); i2c_stop(); [/c] Wenn ich hier die Rückgabewerte abfrage nach jedem write, bekomme ich
-
Thread
Hausbus auf Ethernet über UDP Broadcast
Philipp C. schrieb im Beitrag #3037893: > Wie realisierst Du bei Dir die Kommunikation? Sprichst Du einzelne > Knoten direkt per IP an und baust eine TCP Verbindung auf? Und hast Du > da dann ein spezielles
fehlerhafte Daten. Die Daten sollten somit immer validiert werden. zB: habe ich vor einer Minute 22C gemessen können es jetzt nicht -20C sein!
-
Thread
Relaiskarte mit ATmega16 - Problem mit falschen Steuerbefehlen
volatile struct status { unsigned command:1; unsigned end:1; unsigned addres:1; }status_bits; // char *masiv[]={ "C<0x01>E", "C<0x02>E", "C<0x03>E", "C<0x04>E", "C<0x05>E", "C<0x06>E", "C<0x07>E", "C<0x08>E", "C<0x09>E", "C<0x1A>E", "C<0x1B>E", "C<0x1V>E", "C<0x1D>E" }; /* Print new line to the Hyper Terminal */ void PrintLine() { UART_Transmit(10); UART_Transmit(13); } /* PORT_Init */
-
Thread
I2C-Signal SCL & SDA
, die Ansteuerung dort ist im Großen und Ganzen in ordnung. Aber dann sollte man auch nach jedem i2c_write() auch den Returnwert abfragen, denn dort steht das ACK-Bit drin. Und noch was als Anmerkung zur Library: Die Abfrage zum Clk-Stretching geht nur dann gut, wenn man keinen Watch-Dog aktiviert hat
Code wie folgt geändert: [c] i2c_start(Display+I2C_WRITE); i2c_write(0b10000000); // ControlByte i2c_write(0b11001000); // mode-set i2c_stop(); i2c_start(Display+I2C_WRITE)
-
Thread
Compiler Optimization Level (-O1) ändert Ablauflogik?
ein C Buch für die allgemeine Einführung in C.
Nein, wenn schon, dann richtig: [c] for(uint8_t i = 1; i <= 100; i++) { printf("In C wird bei 0 angefangen zu zählen und das hat Konsequenzen!\r\n"); } [/c] ;-)
-
Thread
Arduino - bringt's das ? Gesperrt
Codeschalter (oben im Bild) abfragen und habe dazu eine ziemlich lange Funktion geschrieben. Mir gab man C Beispiele mit denen das ganz einfach in ein paar Zeilen ging. Hätte ich gewusst, dass ich dort hätte einfach den Code für C nehmen
wollte einen Codeschalter (oben im Bild) abfragen und habe dazu eine > ziemlich lange Funktion geschrieben. Mir gab man C Beispiele mit denen > das ganz einfach in ein paar Zeilen ging. > Hätte ich gewusst, dass ich dort hätte einfach den Code
-
Thread
Was kostet eine Funktion?
Fabian O. schrieb im Beitrag #3027658: > In C eigentlich auch nicht. Kleine Funktionen in der gleichen > Übersetzungseinheit (C-Datei) inlint der Compiler von selber, wenn es > sich lohnt. Das würde ich so nicht unterschreiben wollen, weil
leicht einzuhalten), wo eine einzelne Codezeile i.Allg. sehr viel mehr tut als in C, aber für C ist die Regel unsinnig.
-
Thread
Flanke erkennen, Signal setzen
std_logic; NE555: in std_logic; BOX: in std_logic; VALID: inout bit; BOXOUT: inout bit; alter_zustand: inout std_logic; RISE_BOX: inout std_logic; FALL_BOX: inout std_logic; START: out bit; CLK_HALBE: out std_logic;
Unsigned casten, oder du änderst QINT direkt auf Unsigned, was sich empfielt, da du dann in IF Abfragen direkt mit Zahlen abfragen kannst, anstatt die Bits anzugeben! Cihan
-
Thread
Modulation IR Signal - Interrupt oder Warteschleife?
Das hier [C] while (interrupt_count < countPulse); [/C] ist keine atomare Abfrage des [C] volatile long int interrupt_count; [/C] entweder du machst das atomar (d.h. interrupt_count unter Interrupt
nie irgendwas von einer Funktion sendBit im Code gesehen hat, dass diese Funktion so [C] int sendBit( int wert1, int wert2 ) { ... } [/C] aussieht. Schreibst du [C] sendBit(50000,50000); [/C] dann muss sich der Compiler
-
Thread
Kommunikation zwischen zwei STK500
Vielen Dank Troll! Hat super geklappt! [c]PORTD=PINB;[/c] Kann man das auch mit einzelnen Pins machen?
/c] > > > Die Abfrage scheint allerdings invers zu sein, was Ihrer Erklärung > entgegen spräche. Es gibt auch noch eine 2-te Möglichkeit :-) Ein 1 Bit am PORTD schaltet die LED aus und nicht
-
Thread
Datenstruktur für ein Displaybuffer in C
die Datenmenge im Ram zu halten. Ich dachte > an ein Array der Dimension 20x14. Leider unterstützt C jedoch kein > Bit-Array. Nicht direkt, aber es geht trotzdem in C, siehe [[Bitmanipulation]]. [c] #define N_LINES 20 #define N_COLUMNS 14 uint16 display[NUM_LINES]; [/c] Da passen
Du wirst ja die 7 Zeilen multiplexen. Dann sollte man das für die Anzeige optimieren, also 7 * 40 Bit = 7 * 5 Byte. [c] uint8_t disp_buff[7][5]; [/c]
-
Thread
C Kommentierung in der Praxis
[c]for(zaehler=MIN; zaehler<=MAX; zaehler=zaehler +1){[/c] Und was ist damit gewonnen gegenüber einem [c]for(zaehler=MIN; zaehler<=MAX; zaehler++){[/c] Letzteres entspricht nämlich dem ganz normalen
wird, sofern das nicht unmittelbar ersichtlich ist. Oder zu kommentieren, /was/ ich mit einer If-Abfrage denn testen will. Also etwa so: [c] /* Worker-Threads freigeben */ for (int i = 0; i < chain->length; i++) sem_post(chain->semaphores[i]); if (TIMSK & _BV(OCIE1A)) /* A step is
-
Thread
Suche Automotiv Mikrocontroller den man mit einem free Compiler kompilieren kann!
Fab L. schrieb im Beitrag #3008503: > Ich bräuchte einen AUTOMOTIV (da der uC min. 10Jahre Verfügbar ist) > 16Bit uC mit: gingen auch 32 Bit? Da hättest du diverse ARM implementierung zur auswahl > Dies soll nämlich für eine Steuerungselektronik/Leistungelektronik für >
habe im Moment das Problem, das der uC nicht mehr > lieferbar ist, deswegen möchte ich einen Automotiv uC haben. Wenn Du einen 16Bit Infineon µC hast, dann ist es wohl ein Controller aus der C167-Familie. So wie ich Dich verastanden
-
Thread
Fehler AVR-Studio 4
Zustand der Eingänge ein, sondern den der Ausgänge. Es muss PINB heissen. Wenn Du die Eingänge so abfragst, testest Du alle 8 Bit gleichzeitig. Also nur, wenn der Status aller 8 Eingänge dem Bitmuster 0b00000010 entspricht, ist die Bedingung erfüllt. Du wolltest sicher aber nur ein einzelnes Bit antesten
<1)) { ... }; PORTB |= (1<<2); PORTB &= ~(1<<2); Die Zahl rechts neben "<<" gibt an, welches Bit Du abfragen oder setzen willst. Die Zahl links von "<<" ist immer 1. 1<<2 bedeutet: Den Wert 1 zweimal nach links schieben, entspricht also 0b00000100. Noch ein Tip zum Compilieren: Vermeide
-
Thread
LCD HD44780 und PIC18F45k20
Hallo R.S. Mir fällt da im Moment nur ein - falls Du kein busyflag abfrägst, das timing zu überprüfen, ob die Abarbeitungszeiten der einzelnen HD44780-Befehle eingehalten sind. mfG Ottmar
been defined LCD.c:118:Error [1101] lvalue required LCD.c:120:Warning [2058] call of function without prototype LCD.c:125:Error [1105] symbol 'RB6' has not been defined LCD.c:125:Error [1101] lvalue required LCD.c
-
Thread
Schaltparameter Fernbedienung
Wenn ich das jetzt im Code richtig interpretiere ist es diese Stelle: [c] uart_putc(Data); //entsprechende Ausgänge setzen PORTB ^= BitMask; [/c] Um nun 1,5 sek. Pause zu haben und danach wieder abzuschalten kann man dann doch so erweitern: [c] uart_putc(Data); //entsprechende Ausgänge setzen PORTB ^= BitMask; _delay_ms(1500); PORTB ^= BitMask; [/c] Liege ich da richtig?
-
Thread
Brauche mal Hilfe bei Mikrobasic programm
18f4520 zur Datenausgabe an die Relaissteuerung einer R&S 'Eichleitung mit 9 bistabilen Relais an Bit 0-7 port D und Bit 1 Port E ' An Port C liegt ein 3x4 Tastenfeld 'An Port B ist das LCD-Display angeschlossen dim taste, ausgabe, dummi, wert, summe, kp, cnt as byte txt as char[5] ' Variablen
zusammengehören. PS: ist dir aufgefallen, dass du im then an Port D zuweist, beim else aber an Port C? Ist aber hinfällig, da es anscheinend bei diesem Basic ja eine Möglichkeit gibt, wie man sich beim DIM einzelne Bits am Port mit Namen versehen kann und dann in weiteren Code nur noch mit diesem Namen
-
Thread
Bitstrom per Huffman-Tabelle erzeugen
> Timing Fehler verursachen. Deswegen die Frage an dich Rene D., wie hast > du den die Bits geshiftet / umsortiert / sortiert usw.? > > Cihan Gute Frage Ich habe gerade nachgeschaut. Ich habe kein Schieberegister sonderen ein Ringspeicher. So werden die einzelnen Bits nicht verschoben
+ SZ_BIT_SIZE + VALID_BIT_SIZE_im - 1) DOWNTO (SZ_BIT_SIZE + VALID_BIT_SIZE_im)) <= VALID_DATA_re((VALID_BIT_SIZE_re - 1) DOWNTO 0); [/vhdl] Ausschnitt 2: [vhdl] DATA_STREAM((VALID_BIT_SIZE_re + SZ_BIT_SIZE
-
Thread
BASCOM, Imput Port als Byte Variable abfragen
Hallo, ich frage mich grad, ob es möglich ist in Bascom das Input eines gesamten Portes als Byte Variable abzufragen. Habe bisher immer geschrieben IF PINA.0 = 0 AND PINA.1 = 1 AND PINA.2 = 0 AND ..... then Is mir etz zu dumm geworden :D
-
Thread
Schlechte Datenblätter von Infineon (CAN)
auch, dass diese Register nur geschrieben werden können durch das Zeichen *w* für write unter jedem Bit. (OK, ich hole jetzt sehr weit aus!) Deshalb wollte ich nachlesen, wie man den Status /NEWDAT/ abfragen kann. Dazu steht im Datenblatt: [pre] The Message Object Control Register contains control
die Daten zum auslesen vorhält **Dummstell**. Wenn man mal schaut wie DaVE den Code erstellt um das Bit auszulesen, kommt man aus dem Stauen nicht mehr heraus: [c] #define CAN_ubNewData(ObjNr) (((CAN_HWOBJ[ObjNr].uwMOCTRL & 0x0008) == 0x0008) ? 1 : 0) [/c] Was? Das hardwarseitig gesetzte Bit wird
-
Thread
Snake Projekt: Matrixansteuerung
{ if (MUXPORT = 0x03) PORTC = 0xff; else PORTC = 0x00; } } [/c] Wenn ich die if-Abfrage in meinem Timer-Interrupt mache funktioniert alles. Aber es muss doch eine Möglichkeit geben Funktionen zu schreiben, die im Hauptprogramm verwendet werden können. Sonst
leuchtet > Keine Zeile leuchten lassen tue ich einfach indem ich für die zeilen die > Spalten-Bits auf null setze. D.h. wenn du an PORTA bzw. PORTC 0 ausgibst, leuchtet nix? Dann ist klar, wie der Beginn der ISR aussehen muss [C] ISR(TIMER0_COMP_vect) //Interruptfrequency: 4MHz {
-
Thread
Projekt DVM 4,5 Digit aus Standardbauteilen mit automatischer Bereichsumschaltung
. Was dann als Auswertung dranhängt kann man ja variieren, man kann auch den ICL7135 mit einem µC abfragen, der ein Grafik-LCD ansteuert und die Daten per MQTT ins Netzwerk schickt.
Die Auflösung des ADCs muss wegen der Mittlung über viel Werte nicht einmal so hoch sein, d.h. 12 Bit (ggf. sogar 10) von einem µC internen ADC liefert schon brauchbare Ergebnisse.
-
Thread
Attiny clock & Fuse Bits
MUSS man bei Benutzung des internen Oszillators mit seinem Mittelwert "rechnen". Mit dem FUSE-Bit CKDIV8 stellst du ein, ob der µC mit den vollen (UNGEFÄHR!) 8 MHz des internen Oszillators arbeitet, oder mit 1/8 davon (1 MHz). Bei Auslieferung ist das FUSE-Bit auf 1/8 eingestellt. Abgleichen
hier schon mehrere Takte benötigt, da du, um einen Wert von 2.000.000 feststellen zu können eine 32 Bit Variable benötigt, der AVR jedoch eine 8 Bit-Architektur hat und daher jedes Byte einzeln berechnen muss. Zudem brauchst du noch einige Takte um zu prüfen, ob der richtige Wert erreicht wurde, so dass
-
Thread
Welche Programmiersprache für Windows-Oberfläche?
Strings äußerst ineffizient. Deswegen legt man die Zeichengöße auf einen festen Wert von 8, 16 oder 32 Bit fest. Die 8- und 16-Bit-Darstellungen sind ein Kompromiss zwischen der Anzahl darstellbarer Unicode-Zeichen und dem Speicherplatzverbrauch. In C++ stehen beide Alternativen zur Verfügung, in C# die
effizienteren Datentyp /Text/, der Strings wie C++ und C# als 16-Bit-Array speichert.
-
Thread
Serielle Schnittstelle mit VB auslesen und in Excel Darstellem
kannst, dann kannst du die meisten Programmiersprachen aus der selben Sprachfamilie auch lesen. VB, C, C#, C++, Pascal, Algol, PL/I, Fortran, .... ja, klar. Die haben natürlich alle ihre Besonderheiten. Aber die Grundprinzipien sind dann doch überall sehr ähnlich. Anweisungen werden sequentiell in der
Carsten Sauermann schrieb im Beitrag #3514269: > Wie mache ich das bei 64bit? bei 64bit VB geht es genau so wie bei 32bit VB ;-)
-
Thread
DHT11 Luftfeuchtigkeitssensor Testcode für WinAVR
klappt prima! Hab mir noch mal die Prüfsumme angeschaut. Und du hast recht! Die Addition wird in 16Bit ausgeführt. Man kann sie aber auf 8Bit Casten und den Überlauf nutzen. Ich würde das also so machen: [c]if ((uint8_t)(dht11_data[0]+dht11_data[1]+dht11_data[2]+dht11_data[3]) != dht11_data[4])[/c
(bei bestimmten Werten) auch nicht. Wenn die Werte in den einzelnen char daten [c] (dht_data[0]+dht_data[1]+dht_data[2]+dht_data[3]) [/c] zusammen größer als 255 sind, dann läuft die Prüfsumme über. Das bedeutet wenn der Prüfsummenabgleich nicht klappt, muss
-
Thread
Datenübertragung über Relaiskontakte
an einem µC-Pin und kann die einzeln zuordnen. ;-) (Bin aber ziemlicher Programmier-Anfänger!!) Das (einmalige) Zuordnen ist aber schon eine anstrengende Aufgabe. Ich hab dazu Peltierelemente und ein passend gefrästes
...) Das hat den entscheidenden Vorteil, dass man z.B. einen einzelnen Sensor bequem tauschen kann, wenn er defekt ist. Man muss nur vorher in den neuen Sensor seine richtige Position speichern. Die Sensoren sind zudem auch unabhänig vom µC-Programm. D.h. ich kann
-
Thread
INT2 beide Flanken nutzen (ATmega8515 PE0)
Bit 0 =1 out EMCUCR, Akku ; Daten zurückschreiben [/c] Letzendlich willst du doch nur Bit 0 in EMCUCR auf 1 setzen. Brauchst du dafür die AND-Operation wirklich? Und schließlich
D.h. Zusammengefasst: Du musst die Bitmanipulationen in drei Fälle unterscheiden: a) Setzen von einzelnen Bits in Registern b) Rücksetzen von einzelnen Bits in Registern c) Rücksetzen von _Flagbits_ in Registern Der Code dazu sieht immer ähnlich aus, [NAME] und [REGISTER] sind durch entsprechende
-
Thread
MCP 23S08 Interrupts "sammeln" möglich?
ein INT gemeldet wird, einfach das PORT-Register auslesen und per XOR mit einer Schattenkopie im uC vergleichen, welche Bits geändert wurden, und die dann abarbeiten. Tipp: Du solltest das PORT-Register nicht erneut abfragen, um eine Schattenkopie zu erzeugen, weil dann schon wieder eine Änderung
dem Extender, den die CPU in der Hauptroutine abfragt und die Tasten pollt. Dann wird quasi jedes Bit (8 Tasten) einzeln auf Änderung getestet...
-
Thread
2 Atmega168 per TWI verbinden
setzt man um den TWI Interrupt zu aktivieren, ich hätte erwartet das dies Bit für TW Interrupt Enable steht. Ich finde die Beschreibung im Atmel DB recht gewöhnungsbedürftig, da die Bits nicht einzeln erklärt sind... Bei den Atmel Beispielen ist es auch so, das dort gleich riesen
Hi >Ich finde die >Beschreibung im Atmel DB recht gewöhnungsbedürftig, da die Bits nicht >einzeln erklärt sind... Schon mal im Datenblatt unter 22.9 Register description nachgesehen? Da wird jedes Bit erklärt. MfG Spess
-
Thread
Dieses AVR Studio / debugger macht mich crasy
Folgender Code [c] uint8_t keychanged=0x02; uint8_t i=0; for ( i = 0; i<7; i++) { if (((1<<i) & keychanged) != 0) { // tu etwas } } [/c] beim ersten Durchlauf springt der
bessere Variante. AVRs haben keinen Barrel-Shifter o.ä., sodass im schlimmsten Fall bei _jeder einzelner Berechnung_ von (1 << i) eine Schleife durchlaufen werden muss, die die 1 i mal um eins nach links shiftet. Das ist langsam und verbraucht Speicher. Besser wäre [c] unsigned char mask = 1;
-
Thread
Global Interruptflag
naja hab mein code soweit reduziert, dass in der main nur noch der Aufruf sei() steht und eine Abfrage erfolgt, ob das Global Interrupt Flag gesetzt ist oder nicht. Mit Hilfe eines LCD lass ich mir anzeigen wo im Code ich mich gerade befinde. Habe auch versucht das I-Bit direkt über SREG auf eins
und mit Autostep (Alt+F5) oder Run (F5) etwas schneller arbeiten und zwischendurch kannst du die Bits im SREG beobachten oder auch mal umschalten. Mit C kenne ich mich nicht aus unter Assembler ist es aber auch ganz hilfreich den Interruptvektor nicht auszulassen, damit ein nicht verwendetet Interrupt
-
Thread
AVR: Bit-Abfragen und -Zuweisungen an einzelnem Port
einzelnen Eingang ABFRAGEN? Kann man nur ein ganzes Byte abfragen ( [...] if(PORTB == 0b00000010){ ... } [...] ) oder ist auch ein einzelnes Bit möglich? Beim Googeln habe ich leider keine Lösung für
Sepp schrieb im Beitrag #2955822: > Einzelne Bits kann man nicht lesen, nur die ganzen 8 Bit des Ports B. Man kann z.B. auf Assembler-Ebene zumindest mit den SKIP-Befehlen auch einzelne Bits abfragen, aber scheint hier wohl um C zu gehen
-
Thread
C - Schnelle Datenauswertung auf PC - Multi-Threading?
Tips benötigen könnte (ich zähle auf euch :D): Der Mikrocontroller sendet ADC-Daten (105 KSp/s, 24-Bit/32-Bit)per UDP an meinen PC (Ist ein 24-Bit ADC (ADS1271), dessen Daten auf 32-Bit erweitert werden). Diese werden erst in einem Array gespeichert (Umwandlung in 32-Bit-Datentyp) und anschließend zum
www.purebasic.com/german/index.php Die Sprache hat nur minimale Geschwindigkeitseinbusen gegenüber gutem C Code und für Multithreading schreibt man eine ganz normale Funktion und führt sie mit einer Befehlszeile lediglich asynchron zum Hauptprogramm aus. Es kann auch sehr einfach auf C - Bibliotheken zugegriffen