-
Thread
Antennenanalysator nach EU1KY
Finished erasing 6 pages of 262144 (0x40000) bytes 2019-02-17T09:44:19 INFO src/common.c: Starting Flash write for F2/F4/L4 2019-02-17T09:44:19 INFO src/flash_loader.c: Successfully loaded flash loader in sram enabling 32-bit flash writes size: 32768 size: 32768 size: 32768 size: 32768
werden innerhalb des Programmflusses die enthaltenen Informationen bezüglich der Positionen der einzelnen Elemente nicht berücksichtigt. Ein Touch auf ein Feld wird nicht über die Struct-Info sondern über If-Abfragen mit fixen x,y-Werten den einzelnen Tasten zugeordnet. Damit findet man sich im
-
Thread
Wanderkiste Widlar, Runde II
Bei Einspruch, würde ich die Sachen wieder beilegen. Ansonsten, wenn > jemand die Teile oder einzelne Dinge haben möchte oder der Besitzer sie > wieder haben möchte, bitte melden ich versende dann direkt. Der 40pinner mit dem EPROM huckepack ist ein M85C154 -- richtig? Falls es sich wider
Standard-Ethernet-port für Arduino-Gebastel scheinbar. Bibliothek such ich mir selbst, außer du hast zufällig eine in C (Arduino-Sprache finde ich komisch, lieber den Atmel in C proggen).
-
Thread
CAN Netzwerk mit Gateway - mbed | NXP LPC 1768
// Variable wird übergeben in if Abfrage, array der Bits......// while(1) { if(can1.read(msg)) { // Datenbotschaft CAN einlesen
rein. Das sollte auch im main laufen, du kannst einen Timer nehmen und in dem zyklischen Aufruf abfragen ob der Timer > x ms ist und dann die Aktion ausführen. [c] wait(0.02); // Es wird alle 200ms der Status eingelesen [/c] wartet 20 ms, aber wirst du am hektischen Blinken der LED sehen.
-
Thread
Verweigerungshaltung gegenüber Versionskontrolle
der Verwendung von VSS und Visual Studio (bzw. den damals noch separat verkauften Produkten Visual C++, usw.).
wie GitLab, aber es ist simpel und es erlaubt komfortables Browsen im Repository, Drilldown auf einzelne Commits, einzelne Diffs oder einzelne Dateien darin, Checkout, fast alles, was man braucht, wenn man ansonsten kein GUI zur Hand hat, aber gerne eines hätte. Man kann das auch beispielsweise hinter
-
Thread
IC gesucht zum seriellen Tasterauslesen
Hallo zusammen! Ich will für ein Projekt ca. 100 Taster abfragen. Die Taster sitzen auf einzelnen Platinen, die in Reihe aneinander angeschlossen sind. Ich suche nun nach einer Lösung, wie ich die Taster mit möglichst nur einer Datenleitung abfragen kann. Inspiriert
Guten Morgen, wie wäre es denn mit ein paar MCP23017 16-Bit I2C I/O Expander und einem µC? Gruß
-
Thread
Yet another AVR-timer question (Plausibilitätsprüfung ob OVF und Interrupt sicher.)
" *tcnt0Value=TCNT0; //TCNT0 einlesen [/c] Wenn der Timer in dem Moment überläuft wo die interrupts ausgeschaltet werden wird die TCNT0-Abfrage den Wert 0 liefern. Damit fehlt dann eine komplette Periode in der Zeitrechnung. Mit Abfrage:
glaube dann wird erstmal der Compare Match ausgeführt, weil der Überlauf ja das Flag gesetzt hat. [c] ISR(TIMER0_COMPA_vect) //32 bit Counter { ctcCounter++; } [/c] Das Wäre zwar in Sachen "genaue" Zeitmessung der Worst-Case, aber dafür wäre ich in der Abfrage wieder beim Standardfall, weder
-
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
ISR Code schneller machen?
8 Bit Ringbuffer und einen 16 Bit Einmessbuffer oder nur einen größeren 16 Bit Ringbuffer den ich für alles verwende. Die µC RAM Auslastung ist mit kompletten Code laut Atmel Studio nicht größer 64% gewesen
als 16Bit gesteckt. Immerhin werden die von der Uart sogar als Sammlung einzelner Bits übertragen.
-
Thread
Ansteuerung/Fading von 12 LED mit IR Empfänger durch PIC oder ATTiny
verwenden würdet? Gerne auch Alternativen zum LED Treiber z.B. durch Multiplexen. --> 12 LEDs einzeln/paarweise Ansteuern (dimmbar/fading) --> Analog in für IR-Empfänger --> Festpannungsregler auf 5 oder halt 3,3 V je nach µC Ich hätte auch nix gegen Atmel, nur ist die Entwicklungsumgebung für
)); // write 0 to bit (31 - remote_decoder_g_fill_up_bits) remote_decoder_g_fill_up_bits++; if(remote_decoder_g_fill_up_bits > 31) { remote_decoder_g_decode_ok = 1; // decoding
-
Thread
ATmega328P; Bit setzen/löschen eines Integers klappt nicht.
Code: [c] void funktion_abrufen() { //NUR WENN DER PUFFER = 0 IST WIRD DAS BIT GESETZT puffer=0; //Pinstatus abfragen if (PINB & (1<<0)) puffer |= (1<<bit); //und Bitweise den Integer verändern
Binär eine 1, welche ja nur ein Bit benötigt. Ich habe jetzt wieder und wieder versucht und ich glaube dem Problem auf der Spur zu sein... ich habe in der main Schleife eine Abfrage die so aussieht [c] if (puffer==1<<0) PORTC |
-
Thread
Dauerspeicherung auf SPI EEPROM mit Wrap-around und Sektorlöschung (avr gcc)
ic-sm-flash-16mb-spi-top-boot/dp/1697529 http://www.ebay.de/itm/WINDBOND-W25Q16BVSIG-25Q16B-16M-BIT-FLASH-8-SPI-BUS-SERIAL-EEPROM-BIOS-CHIP/121715258475?hash=item1c56cb746b:g:744AAOSwDNdVuQof
braucht nicht unbedingt mehrere Bytes. Man kann ja das selbe Byte "überschreiben", sofern sich die Bits nur von 1 auf 0 ändern. Ein einzelnes reicht also auch schon für 8 Änderungen.
-
Thread
Mikrocontroller mit Codeeinsicht
Und die Fälle, die mit XXX > getestet wurden, gehen alle durch" https://i.imgur.com/HTisMpC.jpg
anhand von Logmeldungen. Wohlgemerkt: oft - nicht immer. Du immer mit deinen Motoren. Machst du mit µC denn nur (bzw. fast nur) Motorsteuerungen, die sich sofort in ihre Einzelteile zerlegen, wenn der µC mal stehen bleibt?
-
Thread
Altium Designer 18 verfügbar
Properties Panel gefällt mir. Boah, und schon geht der Spass los mit der AccessDatabaseEngine 32 Bit gegen 64 Bit. Und da ist auch schon der erste "crash" von AD18 trotz nur noch AccessDatabaseEngine 64 Bit installiert. Sauber.
Bis Version 17 war ja noch mehr oder weniger alter Delphi-Code drin, in Version 18 jetzt alles auf C# umgestrickt. Inkl. 64-Bit-Unterstützung. Da sind solche Fehler durchaus zu erwarten, vernünftige Firmen arbeiten jetzt noch mit AD17.1, und testen AD18 evt. mal aus Neugier nebenher. Dieser Schritt
-
Thread
Define in Enumeration?
Beitrag #5241574: > Mein Konstrukt tut schon was es soll. Setz doch mal ein #ifndef vor deiner Abfrage. [c] ... #if !defined(MyEnumNumOf) #error Argh! #elif(MyEnumNumOf <= 8) ... [/c] Mit gcc bekomme ich da "Argh!". ;-)
wird also wegen 0<=8 unabhängig von der Anzahl der Enum-Elemente immer die erste Alternative [c] typedef uint8_t MyBitGeFummelType; [/c] verwendet. Der GCC verhält sich genauso, wie eben beschrieben. Welchen Compiler verwendest du?
-
Thread
STM32 HAL versus CMSIS
kann z.B. mit ein paar Bytes den Takt einstellen, man kann aber auch den Erfolg jeder Funktion Abfragen und Auswerten, so wie HAL das macht.
anzupassen braucht, um sie zu portieren. Auf diese Weise wird man weitgehend unabhängig von einzelnen Herstellern - und man wird effektiv, weil man ne Menge Algorithmen weiterverwenden kann. W.S.
-
Thread
Peter Flury´s UART Routinen
} [/C]
gesagt der Codeauszug kompiliert jetzt nicht, nur zur Prinzipdarstellung meinerseits. Durch die if Abfrage(n) blockiert der Code nicht und macht nur etwas wenn es wirklich etwas zu tun gibt. In der Lib sind jedenfalls paar Gimmicks eingebaut, die ist wirklich gut. [c] bool read_Ringbuffer() {
-
Thread
0-pointer in c
Die einzelnen Bits testen?
Ganzzahl in irgend einem Register. Das hst du auch nicht begriffen? Das Zeroflag ist ein einzelnes Bit - genau das was man zum Speichern einer booleschen Variable minimal braucht. Und die Regeln nach denen die ALU das Zeroflag setzt, sind die gleichen nach denen C den booleschen Wert einer Variable
-
Thread
LCD-Display AV1624 ansteuer Probleme
Wenn man die Daten Bit-reverse anschliesst muss man sie auch Bit-reverse ausgeben. [c] #define DB0_Pin PC7 #define DB1_Pin PC6 #define DB2_Pin PC5 #define DB3_Pin PC4 #define DB4_Pin PC3 #
Bzw. wo liegt mein Gedankenfehler? Zumindest in allen Fällen an denen <Disp_Port> direkt mit 8 Bit beschrieben wird. <Exe_Port> pauschal auf Null zu setzen wird auch nicht zielführend sein. [c] void Write_Data() //0 an erster Stelle im Display ausgeben { Exe_Port=0x00; Disp_Port=0x00
-
Thread
Erfahrungen mit Platinen von JLCPCB / EasyEDA
hochzuladen. Headers habe ich so: POS: [code] Designator,Val,Package,Mid X,Mid Y,Rotation,Layer C1,100nF,C_0603_1608Metric_Pad1.08x0.95mm_HandSolder,88.138,-85.09,90.0,top C2,100nF,C_0603_1608Metric_Pad1.08x0.95mm_HandSolder,134.366,-86.614,180.0,top C3,100nF,C_0603_1608Metric_Pad1.08x0.95mm_HandSolder,102.87,-83.82,180.0,top ... [/code] BOM: [code] Comment,Designator,Footprint,LCSC 100nF,"C1,C2,C3,C6,C7",C_0603_1608Metric_Pad1.08x0.95mm_HandSolder,C14663 1k,R1,R_0603_1608Metric_Pad0.98x0.95mm_HandSolder,C21190 ... [/code] Warum CSV? Weil in deinen Excel-Files mehrere Arbeitsblätter
-
Thread
ATMega328p Onchip Temperatur Sensor
regelt. In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden! Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen. ... ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. =>ADCW<= (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen
-
Thread
Ideen zu Programmiervorlesung
und Zugriffe auf globale Variablen im Interrupt sind ein Wort wert. Wobei natürlich "eine VL in C" wesentlich unhandlicher und abstrakter ist, als "eine VL in C für Mikrocontroller"...
alles tut und wie man es umsetzen will, aber man kann fast alle komplexeren Konzepte wie OOP auch in C recht einfach nachbilden. Das Daten und Funktionen getrennt sind betrachte ich als grossen Vorteil von C gegenüber vielen anderen sprachen. Der C Präprozessor ist sehr mächtig, aber nur wenige trauen
-
Thread
Projekt fertiggestellt: MP3 Player für Kinder auf ATTiny-Basis
MP3-Player mit 8-Bit-uC: http://elm-chan.org/works/mp3/report_e.html http://elm-chan.org/works/sd8p/report.html (Mit Konvertierung) Geht schon.
Mitleser schrieb im Beitrag #5227301: > MP3-Player mit 8-Bit-uC: > > http://elm-chan.org/works/mp3/report_e.html > > http://elm-chan.org/works/sd8p/report.html (Mit Konvertierung) > > Geht schon. Hier https://www.mikrocontroller.net/topic/391086 gibt's
-
Thread
Wärmezähler über optische M-Bus-Schnittstelle auslesen
(&tty, speed); tty.c_cflag &= ~CSIZE; tty.c_cflag &= ~CSTOPB; tty.c_cflag &= ~(PARENB | PARODD); tty.c_cflag |= (CLOCAL | CREAD); tty.c_cflag |= bits; tty.c_cflag |= parity; tty.c_iflag &= ~(IXON | IXOFF
nicht ohne: "\x10\x40\xFE\x3E\x16" # SND_NKE mbus_init "\x68\x05\x05\x68\x53\xFE\x51\x0F\x0F\xC0\x16" # statusrequest vor der Abfrage.
-
Thread
Böse Falle Boolean
kein Vergleich != > gemacht. Lothar M. schrieb im Beitrag #5200617: > Das kommt jetzt auf io_bitIsSet() an... [c] static_always_inline uint16_t io_bitIsSet(GPIO_t * const GPIOx, const IOPin_t Pin) { return GPIOx->IDR & Pin; } [/c] For your convenience, the expression
Wenn PeDa ein Patent halten würde auf das Layout seines 2bit 8(/16/32)-Fach Parallelzählers, dann könnte ich es verstehen, wenn man versucht die Bits anders zu layouten und statt binär zu zählen, vier einzelne Bits nach der vier Finger-Methode aufreiht. Da aber
-
Thread
Hausautomation best practice
. abfragen kannst, reicht das. Schalte die Anlage nicht über das Handy scharf sondern verwende einen entsprechend gesicherten Schlüsselschalter.
Leuchtmelder haben möchtest, geht noch ein Kabel zurück. Das wäre übrigend dasselbe Design, wenn einzelne Stromstoßschalter bzw Dimmaktoren verwendet werden.
-
Thread
ADC Prescaler ändern Controllino
beschrieben wie das geht. Also habe ich folgenden Code eingefügt der aber scheinbar garnichts macht: [c] // set prescale to 16 sbi(ADCSRA, ADPS2); cbi(ADCSRA, ADPS1); cbi(ADCSRA, ADPS0); [/c] Ich habe einfach gemessen wie lange 1000 analog reads brauchen (millis davor und danach
PS @ufuf: Dein Code geht - danke dafür. Daraus kann ich aber auch nur entnehmen, dass man ein paar bits setzen muss um den prescaler zu ändern. Aso werde ich mal weitersuchen.
-
Thread
ultra low cost esp8266 alexa heimautomatisierung
save =ok. Aber: Verbindet sich nicht mit dem Router (WPA2)..? Seriell 115200 kommt: rld��|�l�|�$�c|����{�c�c��o'�lno���bx��l;l{lp�n��d��co�|l��c��'o�d��$`�no$`'{���oc�ls��'c�l�$`�o�75 Initialized 4040 bytes of EEPRom memory! No ssid defined AP IP address: 192.168.4.1 ?? Ich habe SAVE gedrückt
Node MCU 1.0 - FauxmoESP 3.0.2 Der fauxmo Funktionsaufruf muss im Beispiel angepasst werden: [c]fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value)[/c] Bei den Board-Einstellungen in der IDE muss die "lwIP" Variante umgestellt werden: IwIP
-
Thread
SD Karte mit FatFs über SPI an Atmega, wie kann man die Schreibgeschwindigkeit maximieren?
Hallo, ich möchte mit einem Atmega32 (2kB SRAM) Daten auf eine µSD Karte speichern. Der µC läuft mit 14,7456MHz, SPI läuft mit einer Endgeschwindigkeit von fosc/2 und zum Beschreiben der Karte benutze ich Elm Chan's FatFs (R0.13). Die 8 Analogeingänge (mit 10 bit) des Atmega möchte ich
Das ist nur die Abfrage eines "Buttons". Wenn ich da drauf drücke, möchte ich, dass die ansonsten doch sehr lang laufende Schleife abgebrochen wird. [c]void __init(void); void newFile(void); FATFS fatFs; FIL file
-
Thread
Kleine Frage zu Makros
Sache, das macht sie leicht verständlich, wartbar und kombinierbar. Man kann seine Funktionen ja in einzelne Dateien gruppieren, oder in C++ in einzelne Klassen & Namespaces. Klassisches Beispiel: In POSIX gibt es kleine Funktionen fork(), exec(), dup2() mit denen man einen Prozess erstellen und stdout/
stackoverflow.com/a/154138 Zudem sind Namen, die mit 2 Unterstrichen beginnen, wie "__gpio_conf_bit", der C(++)-Standard-Library sowie dem Compiler vorbehalten und sollten daher in User-Code nicht vorkommen.
-
Thread
Erklärung für dieses Programmverhalten, AVR Assembler
@Patrick: habe eben auch bei ATMEL auf der Homepage nachgesehen. Jetzt weiß ich auch, warum dort 16Bit und 32Bit Opcode steht. Denke das ist dann eben dieses 1 Wort, 2 Wort länge.
C(++) oder Bascom oder ... besser geeignet :-) c-hater schrieb im Beitrag #5172603: > Genau diese Abwägung ist, was ein Assemblerprogrammierer machen kann, > ein C-Compiler aber nicht. Dafür reicht
-
Thread
VHDL Grundlagen : Rechnen
sehr restriktiv, was die Typumwandlung angeht, einfach so implizit von z.B. float nach integer wie in C gaht das nicht: i = f; Sondern da braucht man schon die passenden Routinen und Umwandlungen. > Im Moment will ich eine 24Bit Zahl mit einer 8 Bit Zahl multiplizieren. Sieh dir numeric_std an: die
Konvertierung in signed integer und das Rechnen mit echten Integerdatentypen, die dann erst vom Compiler auf Bits umgesetzt werden. Da ist die Formulierung nicht komplizierter, als in C, es geht nur der direkte Zusammenhang zu den Bits verloren, die Du irgendwann mal kontrollieren möchtest. Für beide Anwendungsfälle
-
Thread
China SUPER Bauteile-Schnäppchen Thread [V3] Gesperrt
400ppm-Umgebung die Kalibration vorgenommen. ON : FF 01 A3 01 00 00 00 00 5B OFF: FF 01 A3 00 00 00 00 00 5C Leider gibt es keinen Befehl, mit dem man den momentanen Modus abfragen kann. Man kann aber beliebig oft zwischen diesen beiden Modi umschalten. Die Lady in China meinte, dass sie die Sensoren meist
die billigsten Cortex-M0-STM32 im TSSOP20 mit USB sind teurer als ganze "Blue Pill"-Boards bzw. einzelne STM32F103C8T6. Es ist offenbar so, dass nur genau bestimmte STM8/STM32/ATMEGAs billig zu haben sind, die in Massen verwendet werden. Das betrifft ganz besonders STM8/STM32, und teilweise auch
-
Thread
STM32 Lüftersteuerung PWM, Tacho, Display
Fehlermeldung beim Zähler abfragen, siehe Unten Display: Anzeige der einzelnen Lüftergeschwindigkeiten, aktuelle Temperatur und Einstellwerte. - Muss mich erst noch mit dem Display beschäftigen Temperaturerfassung: Wahlweise über PTC/NTC oder I²C. - I²C Temperatursensor funktioniert (zum Testen wird einfaches Poti verwendet) Software: CubeMX STM32 Eclipse (SW4STM32) ---------------------------------------------------------------
-
Thread
STm32F103: Beispielcode der Chan FatFs zum Laufen bekommen
alles weglöschen was er mit diesen Registern angestellt hat, wo mir jeder Nerv zu fehlen würde da die Bits einzeln nachzugucken. De facto bleiben einzig und allein 2 SPI Routinen übrig, eine für Einzelbytes und eine führ mehrere. Die Einstellungen der SPI kenne ich aber nicht, da die ganz erheblich konfigurierbar
alle Bezüge auf die STM32F100.h sind entfernt, da die nicht kompatibel ist. Also hier das diskio.c Modul für den STM32F103C8 Chip, ungeprüft aber dafür sorgfältig umgesetzt.
-
Thread
Ärger mit Codeblocks
ich keine Lösung gefunden. Da ich mich ja nun mal unter Linux auf eine Entwicklungsumgebung (für C,C++, AVR u. evt. Arduino) festlegen möchte, habe ich mir mal das vielversprechende Code-Blocks installiert. Aber schon bei einer einfachen Linux_PC Anwendung stehe ich schon vor einem Phänomen.
Nun könnte eine Warnung wegen doppelte Includierung kommen, aber das soll ja in der headerxx.h durch[c] #ifndef _HEADER_XX_H_[/c] usw vermieden werden. Bei mir wird da auch in der Richtung nichts reklamiert, nur das eben auf Funktionen usw. in der anderen xx.cpp nicht zugegriffen werden kann, obwohl
-
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
Ansteuerung EEPROM 93AA96C funktioniert nicht richtig
Oszilloskop auf, daß der Ausgang des EEPROMs genau dann high wird, um "ready" anzuzeigen, wennn das erste Bit des Lesebefehls gegeben wird. Während des Befehls wird der Ausgang dann low und bringt am Ende die zu lesenden Bits raus. Also stmmen die Abläufe nicht. Diese "ready/busy" - Abfrage ist in irgendeiner
danach soll man noch den Staus entsperren, indem man ein einzelnes Bit ausgibt? Kann mir da mal bitte jemand helfen, die Korrekturen zu finden? mit freundlichem Gruß
-
Thread
8-Bit Controller noch zeitgemäß?
>> D.h. RS-485 mit 9bit für die Adressierung geht damit nicht. > Das ein moderner uC keine Protokolle aus den 90ern unterstützt sollte > verschmerzbar sein. Noe, verschmerzbar ist das nicht. Ist naemlich ein Industriestandard
Für die meisten Anwender - auch hier! - ist es völlig egal, ob der Chip 4, 8, 16, 32 oder 64 Bit hat. Kaum jemand nutzt die sich ergebenen Eigenschaften, weil erforderlich, aus. Die kleinen Bastelobjekte lassen sich mit allen gängigen uC lösen. Es geht also nur um den "Geschmack" des Einzelnen
-
Thread
virtuelle COM-Schnittstelle; VID & PID einlesen?
. Es ist sogar relativ leicht, wenn man in der nativen Sprache des Win32-API programmiert, also C. Von .Net-Programmen aus ist es allerdings einigermaßen Sackstand, aber definitiv ebenfalls möglich. Nur leider eben relativ aufwendig, insbesondere dann, wenn man sowohl 32- als auch 64-Bit-Umgebung
unsicherem C-Dreck in ungeahnte Höhen...
-
Thread
STM32F103: EEPROM Abstürze abfangen
doch immer wieder mal vor, dass meine E2's sich aufhängen und das Programm dann endlos in einer Abfrage eines Events hängen bleibt. Ich benutze die I2C Hardware des Chips, frage Fehler "meistens" ab aber nicht hinter jedem einzelnen Befehl, weil das Programm dadurch sehr unübersichtlich wird und es
); for (i = 0; i < 60000; i++); GPIO_SetBits(I2C_SCL_PORT,I2C_SCL_PIN); for (i = 0; i < 60000; i++); pinstat = GPIO_ReadBit(I2C_SCL_PORT,I2C_SDA_PIN); } while (k-- && !pinstat) if (pinstat) { EE_Init(); return SUCCESS