-
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
-
Thread
ATmega16 startet von allein neu?
ATOMIC_FORCEON) { bytUartIn = pos_uart_rx_in; pos_uart_rx_read = bytUartRead; } SET_BIT(UCSRB, RXCIE); // RX interrupt ein CLR_LED_INF; } } [/c] Jetzt gehen mir die Ideen echt langsam aus... Bin mir noch nicht einmal sicher ob ich wirklich alles als volatile deklarieren
Liest du einen uint16_t aus, dann geht das auf einem AVR nur in 2 Schritten, weil es ja eine 8 Bit Maschine ist und es keinen Assebmler Befehl gibt, der 16 Bit in einem Rutsch aus dem Speicher holen kann. schreibst du daher in C i = globale_Variable; dann kann es die Möglichkeit geben
-
Thread
AVR-Port über Funktionswert konfigurieren
ConnectionNr < ARRAY_SIZE( pinInfo ) ) pinInfo[ ConnectionNr].ddrRegister |= pinInfo[ ConnectionNr].bitMask; } [/C] Das ist eine ein wenig ausgeklügeltere Variante, in der die komplette Information, wie sich die virtuellen Anschluss Nummern auf die einzelnen Port Bits verteilen, in einer Tabelle
Karl heinz Buchegger schrieb im Beitrag #1848325: > [C] > if( ConnectionNr < ARRAY_SIZE( pinInfo ) ) > pinInfo[ ConnectionNr].ddrRegister |= pinInfo[ > ConnectionNr].bitMask; > } > [/C] Fehlt da nicht ein Sternchen? Gruß, Frank
-
Thread
USART Polling
nicht an > jeder Ecke auf das Leerwerden eines Sendepuffers warten mußt? Ich warte halt nicht, [c] if (USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET){ [/c] ich frage es zyklisch ab. Übrigens ist es der Empfangspuffer... Dirk B. schrieb im Beitrag #5433185: > wenn im 10kHz Interrupt 'sauber
Noise_Detect abzufragen bei defensiver Programmierung müsstest du die Voraussetzung für Parity_Error (Parity-Bit im _verwendeten_ Protokoll) vorher prüfen und zusätzlich einen 'Framing Error' beim Empfang nacheinander folgender Zeichen abfragen: wenn nach bspw. 1sek kein Zeichen empfangen wurde, dann dürfte sicher
-
Thread
GPIO schalten
nicht... wie gesagt ist "in" dem Pin bzw. "zwischen" Pin und CPU der SPI controller. Es gibt zwar µC die Multiplexer von jeder Hardwareeinheit zu jedem Externen Pin haben, die sind jedoch rar (z.B. PSoC von Infineon früher Cypress Semiconductor).
Programm um den Chip Select kümmerst, geht das. Dann kannst du auch 200 Chip Selects mit IO-Expandern (I2C oder Schieberegister) implementieren und dann im Code durch die einzelnen "Chips selecten". Der Linux-Kerneltreiber für SPI hat allerdings die 2 bzw. 3 CS-Signale fest verbaut. Für bestimmte Funktionen
-
Thread
PIC CCS C - Port Ausgang mit 8bit int setzen
Hallo Ich suche gerade nach einer Möglichkeit im CCS Compiler für den PIC184550 die PINs eines Portes direkt zu setzen. Also z.B. [code]PORTB = 11000000[/code] wodurch RB0 und RB1 gesetzt sein sollten. Gibt es irgendeine Möglichkeit dies mit einer 8 bit (oder auch 16 bit falls die direction noch enthalten sein muss)? Vielen Dank
-
Thread
Entwicklung eines Bussystems
mit den Sensoren und Aktoren, I2C Bus mit Puffern laeuft ca 50kBd, habe nur einen Master, aber viele MCUs haben Mu!timaster. Ich habe CAT 5 Kabel, 2 Adern I2C, 4 fuer Gnd + 5v + 12V, fuer die 2 verbleibenden baue ich ein RS485 Netzwerk
: Ringkerndrossel TLC 5,0A - 470 µH? R1: Metalloxydwiderstand 1W, 5%, 68 Ohm? > besser?^^ C2: Elko radial, 105°C, 47µ/10V, low ESR, RM 2,5mm, +-20%? >>> aber Lebensdauer nur 1000 Stunden!?
-
Thread
Benötigen Hilfe bei 8051: Schulprojekt Spannungsmesser
Wenn man 256 benutzt, muß man mit 16Bit rechnen, wenn man 255 benutzt, braucht man nur 8...
deswegen schrieb ich "Bei 8 Bit und 5 Volt Vref habt ihr 20mV pro Step." also ist bei 0FFh Feierabend. Nix 16 Bit. Allerhöchstenfalls 8 Bit Plus Signum !!! jetzt geh ins Bett... Stephan
-
Thread
Hargassner Pelletheizung Betriebsdatenerfassung
21 Int Vorlauftemperatur Heizkreis 3 Soll °C 22 Int Vorlauftemperatur Heizkreis 4 Soll °C 23 Int Boilertemperatur 2 SM °C 24 Int HK1 FR25 *10 °C 25 Int HK2 FR25 *10 °C 26 Int HK3 FR25 SM *10 °C 27 Int HK4 FR25 SM *10 °C
1o40901002190000a [/c] Da fällt also immer nur 1 Bit um. Ich vermute (oder so hätte ich das früher gemacht) das der Aufbau so ausschaut: 1o = Protokollkenzzeichen (was für Daten kommen) 8 Byte Daten 1 Nibble Prüfsumme
-
Thread
Sicherungsfestplatten überprüfen
ist nicht richtig. Die Daten verrotten dir durch Bitrot. D.h. sie verlieren mit der Zeit bei einzelnen Bits ihre Magnetisierung. In der Gesamtbetrachtung ist die Demagnetisierung durchaus gering, aber einzelne Bits trifft es halt schon und dann sollte das Dateisystem in der Lage sein, dies zu erkennen
Menge "--force","--i-know-what-im_doing" - Optionen... Mit "examine" kannst du den Zustand der einzelnen Raid-Member abfragen, damit ohne Stochern im Nebel herausfinden wo das Problem liegt, die Scherben zusammenkehren, "assemblen", läuft wieder, scrub-lauf drüber, fertig.
-
Thread
I2C Geschwindigkeit
for stable operation */ }/* i2c_init */ [/code] Quelle: http://homepage.hispeed.ch/peterfleury/i2cmaster.zip - twimaster.c Aber der Präprozessoroutput wäre mal interessant. Grüße Oliver
etwa 9,9 > > Kauf Dir ne neue Brille. ändert nichts ... https://de.wikipedia.org/wiki/Vors%C3%A4tze_f%C3%BCr_Ma%C3%9Feinheiten#SI-Pr.C3.A4fixe