-
Thread
Warum funktioniert mein AVR Assembler Code nicht?
keinen Compiler bei Assembler. Und es ist nicht egal, wenn man z.B. die letzte Stelle wirklich abfragen möchte. Notiert man binär, ist es wirklich sinnvoll, auch die 8 Bit zu beachten.
pin can be read through the PINxn Register bit." Das sollte jetzt klar sein. PINC ist die richtige Adresse, um den Wert der Port C Pins einzulesen. Ist der Pin als Eingang deklariert, liest man damit einen extern angelegten Logiklevel ein.
-
Thread
STM32 ASM Interrupt
im Interrupt deaktiviert/stoppt und vielleicht die Bits nochmal zu lesen insbesondere das Bit "CEN" und "UIE".
Register "ODR" im Interrupthandler (hat er vorher in der main ins Register geladen): This is a 16-bit read/write register. Each bit represents the output value on a corresponding pin. Writing a '0' in bit 8 of this GPIOC _ODR register indicates that the voltage on PC8 is driven by the micro to 0V (GND
-
Thread
MMC/SD ansteuern mit AVR
und noch einmal 30kb/s, in dem ich bei mmc_read_block() den datentyp von count von unsigned long (32bit) auf uint16_t (16bit) verkleinert habe. und wenn ich mir so die pausen zwischen den einzelnen bytes angucke (oszilloskop an der clock leitung) müsste noch fast doppelt so viel drin sein mfg ape
verwende diese Uartfunktionen: /* Uart Routine für die printf() Fkuntion*/ int uart_putchar(char c, FILE *stream) { if (c == '\n') uart_putchar('\r', stream); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; } FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL
-
Thread
msp430f1612_testfunktion pins high-low
*********************************************************************************************** [/c] Zur Erklärung: (so SOLL es funktionieren) Port5 ist mittels [c] P5DIR = 0x10; // alle pins auf eingang setzen, bis auf P5.4 (SW1) P5OUT = 0x00; // alles auf low [/c] initialisiert. In der
Hallo! Hast Du denn auch die P5SEL-Bits gesetzt? Du muss ja auswählen ob der jeweilige Portpin als I/O oder Zweitfunktion eingesetzt wird? Die Abfrage nach den einzelnen Port-Bits würde ich über eine logische Verknüpfung abfragen, also nich
-
Thread
Anforderungssammlung CAN Hausbus mit PIC µC
[0].0 ' Zeige den PORTC-Pin0 vom Sender an Delay_ms(10) RxTx_Data[0]=PortC ' Sende den PortC vom Empfänger mit allen 8 Bit zum Sender zurück CANWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags) ' send incremented data back delay_ms(10) PortB.7
Eingang0 mit der Nachricht 'xyz' auf Port 27' und *** eine pos. Flanke lag auch am Eingang0 des µC vor) so würde SA ein Frame *** mit einer ID, bestehend aus seiner eigenen Adresse[erste 24 bit] (steht auch im Parametersatz) und der Portnummer [übrige 5 bit] '27' *** und mit dem Datenfeldinhalt
-
Thread
[C] Was bewirkt diese Zeile?
Warum werden die einzelnen "Strings" mit "\0" miteinander verkettet? [c] #define STR1 "eins" #define STR2 "zwei" #define STR3 "drei" char str[]=STR1 "\0" STR2 "\0" STR3 "\0"; puts(str); [/c] wird ja nur "eins
zitter_ned_aso schrieb im Beitrag #5699410: > Warum werden die einzelnen "Strings" mit "\0" miteinander verkettet? Damit man sie sauber voneinander trennen kann? > [c] > puts(str); > [/c] > > wird ja nur "eins" ausgeben. Ja. Und? Die Strings stehen da nicht
-
Thread
35 Taster zu 8 Bit wandeln
Halli Hallo ! Ich möchte ca. 35 Taster (können auch mehr sein) in ein binäres Signal mit maximal 8 Bit (ich brauch nur 6 Bit davon) umwandeln.Bekomme ich das nur mit einem Aufbau von einzelnen Gattern hin oder gibts nen Schaltkreis? Hab mich hier irgendwie festgefahren...
74HC147 und 74HC148 für je 8 bzw. 10 Taster. (erzeugen 3 bzw. 4 bit)
-
Thread
Nochmal Frage zum Assemblerporgramm ATmega16
AVR-Dokumentation an. Vielleicht klärt sich dann, wie aus LDI schieb, 0b00000000 über ROL schieb eine Abfrage CPI schieb, 0b11111111 sinnig oder unsinnig wird. Stichwort carry-bit...
deine Stromversorgung? Mit Oszi überprüfen ob Einbrüche vorhanden. Würde Resetverhalten erklähren. Einzelne Bits werden ausgelassen -> Hardware überprüfen. Schiebe doch einfach mal nur ein Bit durch. Dann wird nur eine LED je Port ausgegeben. Kurzschlüsse zwischen den Pins lassen sich so leicht finden.
-
Thread
MSP430 Flash
Das geht beispielsweise so: Im C Code: __attribute__ ((section(".SectionMyFlash"))) const unsigned char MyFlash[] = { 0xe4, // 0 erstes byte 0x0c, // 1 zweites 0xff, // 2 ... 0xff, // 3 ... 0xff
stimmt. Hat jemand ein Vorschlag? C example wären sehr hilfreich! MfG taxcon
-
Thread
Frequenzerzeugung ohne DDS Overkill??
liegt für mich der Hund begraben! Was spricht gegen +++ Aussage? Erhoehe einfach den Zähler von 8Bit auf 32Bit.
möglich. Je mehr Bit desto größer die Frequnezauflösung.
-
Thread
Codeeingabe mit wenig Leitungen für SPS
normale Matrixtastatur benötigt ja mindestens 4 > digitale Eingänge und 3 Ausgänge an der SPS. Bei einzelnen > Tasten wären es noch mehr (10 Eingänge). Nö. Wenn Du die Tasten multiplex abfragst, kommst Du mit 4 Ausgängen und einem Eingang für 16 Tasten aus. Hühnerfutter bzw. ein, zwei Logik-ICs
eingefleischte PIC-Fangemeinde, auch da findet man viel Dokumentation. Das sind auch alles feine µC und im Grunde genauso einfach einzusetzen, wenn nicht einfacher (wie manche behaupten). Als nächstes kommt die STM32-Fangemeinde, das sind kleine 32Bit- Controller, die in diesem Forum auch gerne
-
Thread
Erfahrungen zum Hausbus
LPC11C24. Da ist in einem einzigen Chip auch der Transceiver mit drin. Gibts hier fuer 2.45€+MwSt: http://de.futureelectronics.com/de/technologies/semiconductors/microcontrollers/32-bit/Seiten/5006541-LPC11C24FBD48
2.45€+MwSt: > http://de.futureelectronics.com/de/technologies/semiconductors/microcontrollers/32-bit/Seiten/5006541-LPC11C24FBD48-301,.aspx?IM=0 > Für erste Versuche ist das Olimex Board sehr gut geeignet: > > https://www.olimex.com/Products/ARM/NXP/LPC-P11C24/ Die LPC11Cxx-Serie ist interessant
-
Thread
ADC - Wert berechnen
braucht es keine Kommas. Dabei darf im Zwischenergebnis kein Überlauf auftreten, also Rechnung mit 32 Bit. Beim +/1bar Sensor reichen die Millibar nicht, da muss man eher auf Mikrobar gehen. Klingt komisch, ist aber so. Kann man aber am Ende wieder auf Millibar umrechnen. [c] int p; p = 122 * (int32
es keine Kommas. Dabei darf im > Zwischenergebnis kein Überlauf auftreten, also Rechnung mit 32 Bit. Beim > +/1bar Sensor reichen die Millibar nicht, da muss man eher auf Mikrobar > gehen. Klingt komisch, ist aber so. Kann man aber am Ende wieder auf > Millibar umrechnen. > > [c] > int p
-
Thread
Frequenzzähler 8Mhz ohne Vorteiler - Atmega8
gleiche FUnktionalität wieder findest. Aus dieser Beschreibung ergibt sich dann, wie die zu setzenden Bits beim M644 heissen und in welchem der beiden Konfigurationsregister das jeweilige Bit beheimatet ist. Sehr wahrscheinlich werden die Bits beim M644 sogar gleich heissen, wie die beim M8. Aber verlassen
nicht in 8ms. Da kann zb der Takt des Prozessors ein anderer sein, oder eben dieselben Vorteiler Bits stellen beim M8 einen anderen Vorteiler als beim M644 ein. > Takt des µC ist 16MHz. Das haben schon viele gesagt. Hast du es kontrolliert?
-
Thread
RC-Empfänger zu Arduino - die 100ste Variante?
Im Allgemeinen ist es so, das die einzelnen PWM signale durch den Sender auch hintereinander gesendet und im Empfänger auseinander gewutstelt werden. Früher (in zeiten analoger Fernsteuerungen) wurde der erste Kanal dadurch idendifiziert
unbrauchbar, die Ausgänge musst du manuell ein- und ausschalten. In Assembler oder sogar in normalem C kein Problem, aber mit Arduino overhead ist es mehr als fraglich...
-
Thread
Positioniercontroller Hacken
Endlagenschalter. Ich habe mich bereits erfolgreich in den Bus gehängt und einen Dump von einer zyklischen Abfrage erstellt. Mein Logik-Analyzer könnte eigentlich I2C lesen und ausgeben, aber leider nicht sehr zuverlässig. Ich konnte schon das Positionier-Kommando entschlüsseln, bei der Status-Abfrage hat
Stefan schrieb im Beitrag #6016159: > Das sieht eher SPI aus Für mich sieht das eindeutig nach I2C aus. Start/Stop conditions, Anordnung der Clock-Flanken zu den Daten, tri-staten für das NACK/ACK Bit, alles deutlich sichtbar...
-
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
Auswahl Einplatinencomputer
du einen Zeitstempel mit 32 Bit, wären das 112kBytes (wenn ich richtig gerechnet habe). D.h. du wirst schon die Auflösung vorgeben müssen, wenn man dir ein solches Board empfehlen soll. Ich vermute, jedes einzelne Inkrement genau
tatsächlich speichern muss, ist jede Änderung eines der beiden Encoder-Kanäle, also im Kern: zwei Bit pro Encoder-Schritt. Oder besser: zwei Bit pro Sample einer hinreichend hohen Samplefrequenz, denn dann hat man auch das Timing mit drin (durch temporal äquidistante Samples) und damit letztlich sogar
-
Thread
Anfängerfrage zum negieren
if(flag) ist wahr wenn flag eine ZAHL ist die nicht 0 ist. Was macht "C" mit "!flag". Werden dann einzelne Bits der Zahl flag geändert?
schrieb im Beitrag #3226351: > if(flag) ist wahr wenn flag eine ZAHL ist die nicht 0 ist. > Was macht "C" mit "!flag". Werden dann einzelne Bits der Zahl flag > geändert? Das ! ist ein logischer Operator. Der Ausdruck !flag ist wahr, wenn flag = 0 ist und falsch, wenn flag ungleich 0 ist. Für die
-
Thread
VU-Meter mit XMEGA
Kanäle - 44.1kHz oder 48kHz Samplingfrequenz (höhere Frequenzen kann man wohl vergessen) - 8...32bit Wortbreite (1...4Byte) Meine Rechnung für den worst case geht wie folgt: Der Soundcatcher der Zeitschrift c't liefert z.B. 32bit Daten. SPI triggert nach jedem empfangenen Byte einen Interrupt.
sogar 14, also 2 IC. Du hast aber 13 20 polige ICs, Typennummer unlesbar, sieht aber aus wie 8 bit paralleles Latch. Damit hast du 104 Ausgänge und jede LED einzeln verbunden. Multiplexing ist dabei weder nötig noch möglich, die andere Seite der LED ist nämlich dauerhaft angeschlossen, sei es an
-
Thread
wie im µs Berich effizient warten
Ich weiß nicht welchen STM32 du nutzt, aber Cortex-M3 besitzen einen CycleCounter. Das ist ein 32bit Counter, der mit jedem CPU Takt um eins inkrementiert wird.
sollte es sehr schnell (<20ms) wieder voll sein um ein "Blinken" zu vermeiden. Wenn man jedes Zeichen einzeln überpinselt, sollte das ganze trotzdem in 20-50ms fertig sein.
-
Thread
VGA-Signal digitalisieren
auftauchen? Was den OP angeht, so muss dieser sich -so glaube ich- erstmal von diesem unsäglichen C verabschieden. Das was er da vor hat ist eine Echtzeitanwendung reinsten Wassers, da kommt es auf JEDEN EINZELNEN Taktzyklus an, und zwar so extrem, dass sich das auszählen und optimieren jedes einzelnen
einzelnen Befehls lohnt. Nicht unbedingt. Ich habe auch alles in C gemacht. Das eigentliche Timing wird durch die Hardware vorgegeben (der Timer triggert direkt den ADC).
-
Thread
ca. 100 PT1000 Messwiderstände messen
Ulrich H. schrieb im Beitrag #3917035: > µC C8051F350 sogar einen AD mit hoher Auflösung (16-24 Bit) Kann der wirklich 24Bit Auflösung? Die Dinger gibts ab 3€. Wie kann man die programmieren? Bei Eingabe von Arduino+ADC findet man http:
begrenzt und man auch nur bei eher geringer Samplingrate die maximale Auflösung erreicht. Für 16-20 Bit bei 50 Hz kann es aber schon reichen. Der ADC in dem µC ist durchaus vergleichbar mit dem einzelnen ADS1115. Damit ist der µC sogar ein recht gute Wahl für die Sensoren, auch wenn man ganz so viel
-
Thread
wie Daten an MSP430F1611 seriell einlesen?
programm (zwei drei posts über meinem) folgendes verstehe ich aber nicht. temperatur ist eine 16bit unsigned integer variable...was bedeutet das float davor? in diese variable wird der tempsensor output geladen bei 25°C sind das 0x2FF der sensor sendet immer 11bit pakete [code]Temp_celsius =
(parity); _delay_ms(500); lcd_befehl(1); //ende while //33246 bei 20°C } while(1){}; } [/c] LCD-Ansteuerung: [c] // LCD_FUNKTIONEN /* ansteuerung eines LC-Displays im 4bit modus. Wartezeiten nach Datenblatt
-
Thread
AVR-Studio4, Mainschleife und die totale Verwirrung
allerdings die entsprechenden Register mit Hexzahlen beschreibst und ich zu faul bin da jetzt die einzelnen Bits auseinander zu klamüsern um zu sehen, welche Interrupts du wirklich freigibst, wirst du das wohl selbst übernehmen müssen.
Wenn du die Bits in den Steuerregistern in Hex-Notation definierst, statt deren Namen zu verwenden, muss jeder Leser zur Kontrolle erst umständlich die Bitpositionen einzeln mit dem Datasheet synchronisieren., um rauszukriegen
-
Thread
Suche Projekthilfe bei 5 Achsen Roboterarm mit Schrittmotoren
-1-Nema-17-Geared-Stepper-Motor-1-7A-High-Torque-/231471248219?pt=LH_DefaultDomain_77&hash=item35e4c2f35b Bin aber im Moment noch unschlüssig.
selber zu erstellen, egal in welcher Programmiersprache. Für die Programmierung Deines Arduino nimm C wenn Du das kannst, ansonsten Bascom oder Luna. Ich selber stehe mit C auf Kriegsfuss und programmiere alle meine MC's mit LunaAVR. Eine Alternative für das Projekt wären Schrittmotore gewesen. Für
-
Thread
Gefahren bei Interrupts
@ me_and_my_µC (Gast) >ausgelöst wird und man beispielsweise gerade mitten in einer Aktion mit >z.B. 32-bit Integern ist (auf einem 8-bit µC), dass dann Fehler >auftreten können, weil die Register vermischt
Also verrennt euch da mal nicht zu weit in die falsche > Richtung. AVR ist Mutmaßung, aber "8-Bit-uC" steht im Eröffnungsposting. Und mir wäre kein 8Bitter bekannt, der 16- oder 32-bit-Werte atomar lesen könnte...
-
Thread
ATMEGA128 mit PIO-Baustein 82C55
Hallo, kommt ganz drauf an, was da wie gemessen werden soll. z.B. 8x 8Bit-TriState-Buffer mit den Ausgängen parallel an einen Port, die /OE-leitungen an einen anderen und Du hast 64 Eingänge. Die Abfragen passieren dann per Software jeweils nacheinander. Wenn der Status
74x541 ...) bzw. Latches (74x374, 74x574 ...) zu verwenden, um einen 8-Bit-Eingang bzw. Ausgang zu erhalten. Um I/O-Pins am AVR zu sparen, ließe sich so etwas auch mit einem Schieberegister oder einem I²C-I/O-Baustein realisieren, dann ist allerdings der erzielbare Datendurchsatz
-
Thread
Spezielles Messgerät gesucht
für eine Genauigkeit brauchst du denn? Mit einem Attiny828 schafft man sowas sogar mit nur einen µC, sofern dir 10 Bit Auflösung reicht. Dann wärst du mit ein paar €uro dabei.
. Es gibt systeme die die Leuchten dann über eine Art Bus abfragen und die Funktionstüchtigkeit zentral auswerten. Und die vom TO, mit zentralem Akku. Dafür wir ein einzelner geschlossener Verteilerraum benötigt, wo nix anderes als Sicherheitsversorgung stattfindet
-
Thread
Interrupt weckt PIC nicht aus Idle auf
Kastanie schrieb im Beitrag #5413168: > [c] > __builtin_disi(0x3FFF); > IFS3bits.CRYDNIF = 0; > CRYCONLbits.CRYGO = 1; // Berechnung starten > Idle(); > __builtin_disi(0); > [/c] In diesem Fall sehe ich nicht wofür man die _
um Dinge wie "if(!Interrupt) Sleep();" atomar zu machen. Sonst könnte der Interrupt zwischen der Abfrage und dem Sleep-Befehl kommen. Diese Methode ist auf jedem uC anders. Soweit ich weiß nutzt man beim AVR aus, dass der SEI-Befehl Interrupts erst nach der darauf folgenden Anweisung freigibt. Dadurch
-
Thread
Modernes "Z80 Klein-Computer"-Analogon für Jugendliche/Kinder?
Rest des Lebens verbringen. Ob dann interessehalber der Weg weiter Richtung Gigatron & co. (einzelne Gatter) oder Richtung Apple-][,C=64,NKC,RC2014,CP/M (komplexe Funktionsbausteine) geht zeigt sich dann. Jedenfalls sehe ich das etwa so als Vorstufe von 1-Chip-uC-Systeme wie Arduino,PIC,68HC05
und IN-Befehlen lassen sich an den PCF8574 angeschlossene LEDs zum Leuchten bringen oder Taster abfragen. Da STECCY die IN- und OUT-Befehle auf bestimmte Adressen direkt in I2C umsetzt, kann man sich dann auch noch an andere I2C-Module wagen, wenn man möchte, Temperatur-Sensoren wie LM75 oder anderes
-
Thread
Encoder nach Peter
); } else { PORTA &=~(1<<PINA5); } } } [/c] Das funktioniert: [c] if( diff & 1 ) { // bit 0 = value (1) last = new; // store new as next last enc_delta += (diff & 2) - 1; // bit 1 = direction (+/-) timeout_led=255; // Zeitzähler hochsetzen } if (timeout_led>0) { timeout_led--; // Zeit runterzählen } [/c] Wird
-
Thread
Zustandsmaschine: Namensschemata
Peter D. schrieb im Beitrag #6771745: > Hier mal ein Beispiel mit Hochzählen (onwire.c): > Beitrag "DS18B20 mit Interrupt, AVR-GCC" Ernsthaft? [c] case OW_WR_DONE: // 1. command byte finished pbuf++; onwi.state = OW_WR_BIT0; case OW_WR_BIT0
die sich eher auf einer Metaebene abspielen. Für den speziellen Fall SM auf Mikrocontroller in C könnte man sich z.B. mit Protothreads eine Menge Freiheit bei der Umsetzung der einzelnen Zustände einkaufen. Protothreads muss man immer mit der Kneifzange anfassen weil die Dinger schnell unübersichtlich
-
Thread
65 Variablen in ISR runterzählen schneller machen
eine Variable) eintragen, prüfen und nach einer halben Sekunde ist das Ziel erreicht. Das sind 16-Bit Variablen da ich, ohne Einfluss, Werte von 1ms bis hin zu 5 sek brauche. Lange Rede kurzer Sinn: Das sind 65 Variablen, 16-Bit. Ich habe eine Schleife gemacht, so: [c] ISR(...) { for (i
. Besser wäre, wenn du "function unrolling" machen würdest, dh. du decrementierst jede Variable einzeln. so etwa [c]if (timer[0]) timer[0]--; if (timer[1]) timer[1]--; if (timer[2]) timer[2]--; if (timer[3]) timer[3]--; if (timer[4]) timer[4]--; ...[/c] Du hast aber imm noch eine zweiten
-
Thread
Anfängerfrage zu IO´s
) ) { /* Aktion */ } /* Fuehre Aktion aus, wenn Bit Nr. 2 (das "dritte" Bit) in PINB geloescht (0) ist */ if ( !(PINB & (1<<PINB2)) ) { /* Aktion */ } ...[/c] Ich versteh leider den Zusammenhang für die Abfrage des z.B. PINB nicht, wenn es expliziet
steht irgendwo "#define PINB2 2"). PINB2 ist lediglich eine Zahl (eine 2, um genau zu sein). ANSI-C-Compiler wie der AVR-GCC können nicht auf einzelne Bits zugreifen. Die kleinste verarbeitbare Datenmenge sind auf der AVR-Plattform 8 Bit. Um einzelne Bits zu manipulieren, muss man deshalb zu "Tricks
-
Thread
AVR Bootloader
Ich habe mir vor einiger Zeit mal eine Klasse in C++ sowohl für den C++-Builder von Borland als auch den dev-c++ geschrieben, mit der ich Daten über die serielle senden und empfangen kann. Damit habei ich das C-Programm (PBOOT.C) von Peter ziemlich
Ponyprog in den Flash lade, unterscheidet es sich nur in den ersten 2 bytes: Bootloader: $00000: 97 c0 51 c0 ..... Ponyprog: $00000: 38 c0 51 c0 ..... da komme ich jetzt nicht weiter und bitte um Hilfe. vielen Dank im voraus horst.
-
Thread
Kann man mit OCR1B rechnen
Hallo Von diesem Timer kommen 20ms [c] void timer1_init() { // Timer 1 16 Bit konfigurieren 16MHz TCCR1B|= (1<<CS11)|(1<<CS10); // Prescaler 64 TCCR1B|= (1<<WGM12); // CTC Modus Nr 4 TIMSK1|
Klaus schrieb im Beitrag #7099606: > Kann ich einfach rechnen: Ja, kannst du. Auch [c]OCR1A += 20;[/c] geht. Das Register hat lesend und schreibend 16 Bit, und man liest auch den gleichen Wert zurück, den man rein geschrieben hat. Allerdings würde ich mehrfache Operationen (wie
-
Thread
Leisungsvergleich ARM AVR
Operationen eventuelle Überläufe berücksichtigt werden müssen. Der ARM rechnet prinzipiell mit 32 Bit. Um die Bits los zu werden, die durch eventuelle Überläufe auf 1 gesetzt wurden, erzeugt z.B. der IAR Compiler bei 8-Bit Variablen massenhaft Shifts um 24 Bit nach links, gefolgt von Shifts um 24 Bit
250; //SSP0CR0 = 0x0007; /* Set mode: SPI mode 0, 8-bit */ //SSP0CR1 = 0x2; /* Enable SSP with Master */ } ... void ssp0_set_speed(char divider){// fast 2...254 slow SSP0CPSR = divider; } [/c] Der SPI-AVR mit halbem Prozessortakt... Beides
-
Thread
Unbekanntes Bus System entschlüsseln
Controller auszulesen. Mit einem FDTI-RS232-5V Kabel hatte > ich leider keine Chance, da es keine 9 Bit Datenlänge unterstützt. Ja, aber die meisten µC (AV PIC, STM32 usw.) mit eingebautem UART können das. Ansonsten kannst du ja immer noch einen Software-UART verwenden.
würde daher meiner Meinung nach lauten: - Motor ansteuern -> mit Reihen und Spaltenanwahl (2x 4Bit) oder mit Motoranwahl (6 Bit) - Abfrage Motorstatus (dreht, steht, Fehler, ...) - Lichtschranke abfragen - Lichtschranke zurücksetzen - Statusabfrage der Treiberkarte (eventuell nur ein Live Bit
-
Thread
Welche Programmiersprache für Comports?
Sebastian schrieb im Beitrag #7298274: > Wenn du für die obige Aufgabe ein externes > C-Programm bemühen musstest, ... dann kann dieses die serielle Schnittstelle auch gleich selbst abfragen.
Durchsehen so aus, als bräuchte ich 3 Tage, um das zum Laufen zu bekommen und außerdem ist wohl nur eine 32-bit-Version für Windows vorhanden. Meine Lösung ist typischerweise eine Pipe zu einem kleinen C-Programm, das dann den UDP-Verkehr abwickelt. Pipes oder TCP-Kanäle zu anderen Programmen funktionieren in
-
Thread
Win 10 nur mit SSD sinnvoll?
auf einem 64 Bit OS.
https://support.microsoft.com/de-de/windows/l%C3%B6schen-der-vorherigen-windows-version-f8b26680-e083-c710-b757-7567d69dbb74
-
Thread
Einschaltverzögerung Bodenstrahler mit BM
Leistungsschalter für die Lampen, optisch potentialgetrennt b) die Steuerung für das Zeitverhalten c) dem Empfänger/Auslöser d) Netzteil für b u. c Die kann man alle einzeln aufbauen, testen und wenn sie funktionieren zusammen in ein Gehäuse Setzen und in Betrieb nehmen. zu a) da würde ich Solid-State-Relais
die einzelnen PWM-Kanäle uint8_t pwm_setting_tmp[PWM_CHANNELS+1]; // Einstellungen der PWM Werte, sortiert // ändern auf uint16_t für mehr als 8 Bit Auflösung
-
Thread
Frequenzzählung möglichst sparsam mit 2313
Lösung mit (Mega) 2313 eingeschossen. Ich meinte natürlich das zuständige Controlregister des 16-Bit-Timers mit den Bits für die Auswahl der Timer-Taktquelle. Dort wo der "Vorteiler" eingestellt wird. Denn eine dieser Einstellmöglichkeiten (mit den "Vorteiler-Bits") schaltet den Timer auf den Eingang
also die Anzahl der nötigen Takte bis der 8 Bit Zähler intern wirder auf 0 steht. Damit haben wir also einen 16Bit Wert aus Timer1->T1 + 8Bit unterste Bit um die Genauigkeit zu erreichen. Da der AVR über FLUSH_F den 8Bit Zähler immer auf 0 inkrementiert
-
Thread
Bus per MISO MOSI
Ich würde an deiner Stelle I²C benutzen. Dort kannst du jeden Teilnehmer einzeln adressieren, und nur der adressierte antwortet. SPI wird bei vielen Teilnehmern immer langsamer.
schrieb im Beitrag #5628568: > @Jörg W. (dl8dtl) (Moderator) > >>Ich würde an deiner Stelle I²C benutzen. Dort kannst du jeden Teilnehmer >>einzeln adressieren, und nur der adressierte antwortet. > > Ja, aber nicht wenn das Ganze über mehrere Dutzend Meter verteilt ist. I²C kann man praktisch
-
Thread
STM32F407 und das SPI Modul
read from the SPI bus */ // there is a 500ns pause between transfers. return SPI2->DR; } [/c] Funktioniert auch, ABER zwischen den einzelnen Bytes ist eine ziemlich grosse Pause von 250ns beim SPI1 und 500ns beim SPI2 zu sehen. Wo kommt die denn her? Die Pause ist unabhängig von der eingestellten
, was wohl der Grund für die Pause ist, nicht mehr abfragen wenn man nur senden möchte. Am Ende dann auf das Busy Flag warten. Ich weiss das das im Datenblatt nicht empfohlen wird. Beim DMA Transfer allerdings schon. Dazu komme ich später. [c] void SPI2
-
Thread
STECCY - ZX-Spectrum-Emulator mit STM32
. Da jetzt die Pins etwas knapp werden, würde ich dann bei Verwendung (und nur dann!) I2C und SPI in die zur Verfügung stehenden 8-Bit-Ports mappen, so dass dann bei gleichzeitiger Verwendung der 8-Bit-Ports ein paar Bits nicht mehr zur Verfügung stehen würden, da dann von SPI und I2C belegt
0x7F reserviert. Ich könnte für die 7-Bit-I2C-Adresse einfach das obere Byte 1:1 nehmen. Dann ist es wirklich egal, was da für ein I2C-Device dranhängt. Also: Z80-Port xx7F = I2C-Device mit 7-Bit-I2C-Adresse xx. Damit wäre ein PCF8574
-
Thread
Programm reagiert nicht auf Tasterdruck
behebt, findet sich hier. http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29
auf 1. Schreibs so: [C] void zustandaendern (void) { Leddefinition = 1 - Leddefinition; ledschalten(); } [/C] oder so [C] void zustandaendern (void) { Leddefinition ^= 0x01; ledschalten(); } [/C]
-
Thread
SPI Kopplung von ATmega8 und ATtiny 2313
Adresse für dieses Register innerhalb der Adessen 0x01..0x1F liegt (nicht MEMORY MAPPED) kann man einzelne Bits ganz einfach mit *sbi* oder *cbi* verändern und die Skipbefehle *sbis* oder *sbic* verwenden. [avrasm] .equ SPI_ON = 2 [/avrasm] ..habe ich selber definiert. Damit kann man im Programm
Formulierung > ldi R16,0b00011000 ; (1<<USIWM0)|(1<<USICS1) > out USICR,R16 > Sollte bis auf Bit 6 identisch sein. Kannst Du das für mich prüfen? Ich > bin bei Adressierung von Bits und Masken immer unsicher. Das ist schon korrekt so. Ich setze ja nurnoch das Interrupt-Bit, um einen Interrupt
-
Thread
Problem Drehgeber Rechnen + Senden RS232
// Ende Endlosschleife return 0; } /* Ende Mainfunktion */ [/c] Anbei mein Code! Das Auslesen des Drehgebers funktioniert. Auch Das umrechnen von int inc char und auch das Senden der einzelnen Chars. Alles funktioniert. Aber ohne die Schleife. Sobald
// XY0 Nop(); // 0,2 µs Warten [/C] und dem nächsten Abfragen hier [C] gray_code = gray_help | PORTBbits.RB0; //A2 XYZ gray_help = gray_code << 1; // XYZ0 gray_code = gray_help
-
Thread
Rückgabe von ZWEI Werten aus einer Funktion
Lust auf Pointer hast, könntest du auch versuchen, die beiden Werte in einem zusammenzufassen: [c] uint32_t BeideWerte = 0; uint16_t Wert1 = 10; uint16_t Wert2 = 20; BeideWerte = Wert1 | (Wert2 << 16) [/c] Ist nicht getestet, aber so sollte dein Wert2 in den oberen 16 Bit des 32bit Werts
ich meinte sowas in dieser Art, keine Ahnung, ob "man" das so macht: [c]/* zaehltaste.c */ static int zaehlerstand = 0; void zaehlpin_abfrage (int pin_zustand) { static int alter_zustand = 0; if (pin_zustand != alter_zustand) { alter_zustand = pin_zustand