-
Thread
atmega168pa programmieren
WDP3); [/c] Ergebnis: Programm arbeitet wie vorgesehen. Ausgeschaltet, eingeschaltet, Programm geht nicht mehr, auch nicht nach reset. Nur einige der PORTC-Pins sind low. Neu geflasht, geht das Programm wieder. Das ist reproduzierbar nach Spannungsverlust so. Die Zeile aus dem Programm habe ich wieder
hätte jedoch "-mmcu=atmega168" statt dessen einsetzen müssen. Kaum macht man es richtig, schon geht es. Immer wieder verblüffend. Danke für Euren Rat, Stephan
-
Thread
Array an 7 Segmentanzeige ausgeben
Code für die Printnumerberfunktion: [C] void printnumber(char* zahl, uint8_t unter0) { PORTC |=0x06; SevenSegment(zahl[3], 0); PORTC = (1<<PC0); _delay_ms(3); PORTC |=0x06; SevenSegment(zahl[2], 0); PORTC = (1<<PC1); _delay_ms(3); PORTC |=0x06; SevenSegment(zahl[1], 0); PORTC = (1<<PC2); _delay_ms(3); PORTC |=0x06; SevenSegment(zahl[0], 0); PORTC = (1<<PC3); _delay_ms(3); } [/C]
-
Thread
Analyse der Arduino Libraries
>Nicht nur das, der Zusammenhang zwischen Bits und Ports geht auch >verloren. Es ist eine Abstraktion. Man kann somit Programme zwischen einem Arduino Uno http://arduino.cc/de/Main/ArduinoBoardUno( Atmega328 ), Arduino Mega http://arduino.cc/de/Main/ArduinoBoardMega
, warum ist das denn so? Na stell dir einfach vor, dein DAC wäre an 4 Pins von PORTC und 4 Pins von PORTB angeschlossen. Und jetzt willst du den Analogwert von 0x7F auf 0x80 ändern. Da du nicht beide Ports in einem Befehl beschreiben kannst, sieht der DAC für kurze Zeit einen Zwischenzustand
-
Thread
Atmega328p mit 7-Segmetanzeige
PNP geht doch nicht, da Anzeigen gemeinsame Kathoden habe. Bauteilwerte: RT1-RT4: 4,7k und R5-R12: 100 Ohm. Versorgungsspannung sind 3,8 Volt.
Werner_Rau schrieb im Beitrag #3193649: > PNP geht doch nicht, da Anzeigen gemeinsame Kathoden habe. Das stört doch nicht. > Versorgungsspannung sind 3,8 Volt. Das ist zwar jetzt neu, aber auch kein Problem. 5mA/Segment sind völlig ausreichend
-
Thread
PWM liefert dauerhaft 2.5 Volt?
<avr/interrupt.h> int main(void){ DDRC &= ~(1 << PC5); // PC5 als Eingang festlegen PORTC |= (1 << PC5); // Pullup für PC5 aktivieren DDRC &= ~(1 << PC4); // PC4 als Eingang festlegen PORTC |= (1 << PC4); // Pullup für PC4 aktivieren //Hardware-PWM initialisieren DDRB
Wenn du die Tasten etwas länger drückst, dann ist die LED ganz hell oder ganz aus. Mit kurz antippen geht es stufenweise.
-
Thread
DMX Board geht nicht :/
dmx_buffer[24]=255; dmx_buffer[25]=255; dmx_buffer[26]=255; dmx_buffer[27]=255; PORTC |=(1<<PC5); _delay_ms(1000); dmx_buffer[24]=0; dmx_buffer[25]=0; dmx_buffer[26]=0; dmx_buffer[27]=0; PORTC &=~(1<<PC5); _delay_ms(1000); } } [/avrasm
Der C der Quer über den AVR geht, da fehlt doch noch ein kabel drann.
-
Thread
ATmega EEPROM Schreiben
Studio machen? Gruß Artur PS. die Befehle zu Schreiben/Lesen des EEPROMs sind mir bekannt, mir geht es nur um den Trick.
Speichern anzustossen. Du kannst eine EEPROM Zelle mindestens 10000 mal beschreiben, ehe sie kaputt geht. So oft stellst du diese Faktoren nicht um! Oder fummelst du im Minutentakt, 24 Stunden am Tag, 2 Monate lang an dieser Einstellung rum?
-
Thread
U(S)ART funktioniert nicht richtig
Hauptprogramm int main(void) { //Einmalig abgearbeite Kommandos DDRC |= (1<<PC5); //Definiert PortC Pin 5 als Ausgang DDRB &= ~(1<<PB0); //Definiert PortB Pin 0 als Eingang uart_init(); //UART-Initialisierung aufrufen //Lokale Variablen uint8_t Flanke = 0; char y;
> öffnet, schließt ... > > Du erkennst bei jedem Prellen einen Tastendruck. Ich weiß, es geht dabei ja auch nur darum, das nicht andauernt das Zeichen gesendet wird. Ist doch nur nen Versuchsaufbau. Ist aber gut gemeint, Danke :-) DAs wesetliche Problem ist nur, das das X nicht so ankommt
-
Thread
Sensor über I²C-Bus auslesen - Bascom-Code
Baud-Rate $baud = 9600 'Ports für IIC-Bus Config Scl = Portc.0 Config Sda = Portc.1 'Deklaration der Variablen Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und
'BEEP Sound Portd.7 , 400 , 450 'BEEP Config Portc = Output Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'Konfiguration COM-Port 1 Open "com1:" For Binary As #1
-
Thread
Nullstellenunterdrückung bei 7 Segment
' Ein-/Ausgänge Config Portb = Output '7 Sekment Config Portc.0 = Input Config Portc.1 = Input Config Portc.2 = Input Config Portc.3 = Input Config Portc.4 = Output Config Portc.5 = Output Ddrd = &B11111111 '1
'4 Portc.4 = 0 Case 5 Portb = &B00010010 '5 Portc.4 = 0 Case 6 Portb = &B00000010 '6 Portc
-
Thread
Funkprotokoll dekodieren
Datar = 0 Bitzahler = 1 Config Pinb.0 = Input Portb.0 = 1 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 2 Do Cls If Bitcount = 3 Then Datar.bitzahler = 0 'Wenn nur 3 high
erstmal ein sauberes Signal anschauen und danach das Protokoll programmieren. Wenn das dann fertig ist, gehts an Empfänger. Dann kommt der an den atmega zum Wetterdatenempfang ran.
-
Thread
Brauche Hilfe bei Grundlagen: 16-Segment Anzeige
Wert hat ''zeichen"? PORTC=(sign[zeichen-32]>>8); } int main() { int8_t i; DDRB = 0xFF; DDRC = 0xFF; for(i=0;i<=58;i++) { PORTB = sign[i]; PORTC = (sign[i] >>
Funktionen: http://www.c-howto.de/tutorial-funktionen.html > char text[] = "++ HELLO WORLD! WIE GEHT'S? **"; ja zeichenweise >void char_out (uint8_t zeichen) //wieso steht das so, und nicht im >Hauptprogramm? >{ > PORTB=sign[zeichen-32]: //welchen Wert hat ''zeichen"? > PORTC=(sign[zeichen
-
Thread
1 Mhz mit ATMega8 erzeugen
Könntest du kurz erklären warum das nicht geht?
Geht denn nicht Timer1 im CTC-Modus mit Hardware-Pintogglen?
-
Thread
Pieptoene erzeugen mit einem Atmega8
CS10) | (1<<CS11)); for(;;) { if(TIFR&(1<<OCF1A)) { _delay_us(1); PORTC ^= ((1<<PC0)); _delay_ms(1); TIFR = (1 << OCF1A); } } } [/c]
://http://de.wikipedia.org/wiki/AdLib Man kan ein Problem schon mir Hardware lösen. Allerdings geht es heute vermutlich mit Software billiger: http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID.html >Wenn es schöner klingen soll kommt auch die Wavetable Synthese mit Hilfe >eines Midi
-
Thread
atmega16A Programm richtig laden
angerührt, da ich ein totaler Anfänger > bin. Das ist schlecht [C] #define SegCntrlPort PORTC #define SegCntrlPin PINC #define SegCntrlDDR DDRC [/C] auf dem Port C liegt beim Mega16 das JTAG Interface. Solange du das nicht abschaltest, verhalten sich einige Pins an diesem Port nicht
wenig Sinn ein 'komplexes' System ohne Vorstufen aufzubauen und sich dann zu wundern dass nichts geht. Hast du beispielsweise schon mal eine popelige einzelne LED an einen Port gehängt und nachgesehen ob du sie ein/aus schalten kannst, oder zum blinken?
-
Thread
Input auslesen
Hi >data = PORTC & (1 << 2); PINC ist das Eingangsregister. Außerdem muss JTAG deaktiviert werden, denn das benutzt PORTC2. MfG Spess
>data = PORTC & (1 << 2); PINC, PINC, PINC, PINC, PINC, PINC, PINC Nicht PORTC verdammt noch mal.
-
Thread
Verständnisfrage zu 62xxx Ram's
anscheinend von Hand an -- AVRs aber haben auch ein Speicherinterface und können das selber machen, und das geht dann komplett ohne Monoflops und ist Größenordnungen schneller als der handgedengelte Speicherzugriff, weil auf der Softwareseite das genauso wie das interne RAM angesprochen werden kann.
Arbeitsregister LDS temp2, Adr1 LDS temp3, Adr2 OUT PortC,temp3 ;Ausgabe A16-19 auf PortC CBI ALH ;Adresslatch verriegeln OUT PortA,temp2 ;Ausgabe A08-A16 auf PortA OUT PortC,temp1 ;Ausgabe A00-A07 auf PortC CBI ALL
-
Thread
Lüfter - Speed Sensor auswerten
sind weniger als 10mA, aber etwas wenig. Bei 1k ist man mit 5mA schon wesentlich näher dran. 510 Ohm geht aber auch nicht (das wären 9,8mA). >> Mit 1k oder 120k als Pullup (in dem Falle extern) funktioniert es >> übrigens auch nicht. > natürlich nicht. Was wäre denn Deiner Meinung nach der beste
weniger als 10mA, aber etwas wenig. Bei 1k ist man mit 5mA > schon wesentlich näher dran. 510 Ohm geht aber auch nicht (das wären > 9,8mA). Was gefällt dir an deinen 0,125mA nicht? Ist das weniger als 10mA oder nicht? Da steht nix von "möglichst genau". Wie soll das Ding bei höheren Strömen den
-
Thread
Analog Digital Converter kleines Problem (PIC)
Hallo! Habe ich schon versucht doch es geht leider immer noch nicht! mfg ANTON
Hallo Anton, ich versteh Dich nicht! Du hast einen funktionierenden Code erhalten. Wenn PORTC zur Ausgabe verwendet werden soll, tauscht Du eben PORTB gegen PORTC im Code. Es ist doch egal ob man die LEDs am Ausgang als Balkenanzeige oder "Einzel-LEDs" oder sonst wie bezeichnet. Mehr als
-
Thread
LED mit Microcontroller schalten
Wenn du 8 LEDs an PortC hast dann versuche mal folgendes: [c] while(1){ PORTC = 0xAA; //jede zweite an _delay(1000000); //delay for 1000000 cycles PORTC = 0x55; //und
Du hast ja schon mal den ganzen Port C auf Ausgang gestellt. Das ist schon mal gut. PortC ist aber nicht nur ein Bit sondern ein ganzes Byte. Du sagst jetzt ja mit PORTC =1 das gleiche wie PORTC = b00000001.
-
Thread
LCD Mit pc verbinden
Portd = Output 'C1=Ausgang -> LED Ddrc.1 = 1 Portb.1 = 1 'Taste an C0 -> PullUp Ddrc.0 = 0 Portc.0 = 1 Do Waitms 100 Cls Lcd "so habe ich was" Lowerline Lcd "am display.. " 'Taste auswerten If Pinc.0 = 0 Then 'LED -> an Portc.1 = 1 Else 'LED ->
aus Portc.1 = 0 End If Loop End [/code]
-
Thread
DS1820 mit Multiplexen
kann ich da machen, um das Problem zu lösen? Vor der Lösung musst du erstmal verstehen, was schief geht.
> Config 1wire = Portc.5 Du nutzt augenscheinlich eine fertige Software-OneWire-Emulation. Die Vermutung liegt nahe, dass ebenjene rücksichtslos am globalen Interrupt-enable rumfuhrwerkt. Das zusammen mit 'timer0-ISR
-
Thread
CDC für xmega
Chip kennt, dann muss er dafür auch korrekten Code übersetzen können. Wenn er ihn nicht kennt, geht einfach gar nichts (hatten wir ja am Anfang).
Erweiterungen reinpacken und schon ist's perfekt. Noch eine Frage, das lesen (0,03s) und schreiben(1,34s) geht ja richtig schnell, warum ist das verifying(22,74) dagegen so relativ langsam?
-
Thread
Taster mit LED Dauer, Blinken
Taster 3 mal drücken - LED aus. Mein Problem ist folgendes: wenn ich den Taster 1 mal drücke geht die LED an. Beim 2. drücken blinkt die LED, geht aber nie mehr aus der Schleife raus, ich kann also so oft drücken wie ich will, es ändert sich nix mehr. Wo liegt der Fehler? Vielen Dank für Eure
{ PORTC &=~(1<<PC0); _delay_ms(500); PORTC |=(1<<PC0); _delay_ms(500); } if (i==3) { PORTC &=~(1<<PC0); } } return(0); }
-
Thread
Mehrere Eingänge
PINC > PINC = 0xff; Um die Pullups tatsächlich zu aktivieren, entscheide dich lieber für [c] PORTC = 0xff; [/c]
// Programm variable ... [/C] sparen, denn dass es an dieser Stelle genau um diese Varible geht, dass kann auch ein Blinder in den 3 Zeilen Code problemlos erkennen.
-
Thread
atmega88a-pu___ports an bzw ausschalten
dan zeig doch erstmal den qullcode von deinen Versuchen. Geht das flashen überhaupt fehlerfrei?
int main(void) { //Port initialisieren DDRB = 0xFF; PORTB = 0xFF; DDRC = 0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0xFF; while(1) { } return 0; } -------------------------------------------------- das flahen zeigt keine fehler und die fuse bits hab ich auch so gelassen
-
Thread
7-Segment Anzeige ansteuern
Hallo Community! Mir geht es darum ein 7-Segment Display mit einem ATmega8 anzusteuern. Das alles möchte ich in C (GCC) machen. Einzelne Zahlen darzustellen ist ja nicht das Problem, jedoch scheitere ich daran Variablen auszugeben
Ok, es gab ein paar Schwierigkeiten (Fehler meinerseits), aber jetzt geht es! Ich danke euch! Edgar
-
Thread
Linvor Bluetooth Modul antwortet Atmega8 nicht wie erwartet
while ( !(UCSRA & (1<<RXC)) ) { //warten bis senden fertig long_delay(300); PORTC |= ( (1<<PC0) | (1<<PC1) | (1<<PC2) | (1<<PC3) ); long_delay(300); PORTC &= ( ~(1<<PC0) & ~(1<<PC1) & ~(1<<PC2) & ~(1<<PC3) ); long_delay(300); PORTB = UDR; PORTC
) & ~(1<<PB3) ); long_delay(700); cReceive=UDR; PORTB = cReceive; PORTC = ( cReceive >> 4); long_delay(2000); } PORTC |= (1<<PC4); long_delay(500); PORTC &= ~(1<<PC4); long_delay(150); } } [/c] Equinox
-
Thread
Motoransteuerung mit PWM
Also grob durch 4 teilen geht immer recht gut. Damit kommst du in etwa auf 8bit PWM-Werte. 1023 / 4 = 255.75 Programmablauf wäre dann in etwa so: 1. ADC einlesen 2. Wert durch 4 teilen 3. Wert ausgeben 4. Zurück zu
+++ // H-Bridge Ausgabe // Enable if(STATE_DI3_INPUT_X5) { PORTC &= ~(1<<ENABLE_H_Bridge_A_PINC7); PORTG &= ~(1<<ENABLE_H_Bridge_B_PING2); } else { PORTC |= 0x80; // PINC7 PORTG |= 0x04; // PING2 } // Motor links
-
Thread
Arduino Leonardo stellt sich tot
Hallo, sorry wegen den fehlenden Infos. Ich versuch alles so gut es geht zu vervollständigen. Der Reset Taster geht überhaupt nicht mehr(keine Reaktion). An Fuses in Atmel Studio sind eingestellt: BODLEVEL: 2V6 ISPEN ist ausgewählt BOOTSZ: 2048W_3800 SUT_CKSEL:
Main/arduino-leonardo-schematic_3b.pdf. Die Onboard-LED hängt am Arduino-Pin IO13, also an PC7 von PORTC!
-
Thread
ATmega32 - start/stop button
Ein Taster ist nur so lange geschlossen, wie er gedrückt ist. Wenn du ihn losläßt, geht er zurück. Zeig mal das System, was du hast. Ich denke, daß dort auch das Programm schon läuft, und dann die Eingänge abfragt. Und nur, wenn der Taster gedrückt wurde, wird die Aktion ausgelöst.
Bis jetzt wurde noch nicht gesagt, um welche Hardware es sich handelt. Nur, daß es um den ATmega32 geht. Oder hab ich was übersehen?
-
Thread
Frage zu Pointern in C
Ich komme in diesem Fall nicht richtig mit den Zeigern klar. Kann jemand > helfen? nein, das geht nicht. Denn beim compiler kommt das ERROR_1 überhaupt nicht an. Der Preprozesor ersetzt vorher alles Stellen wo ERROR_1 durch eine 1. Damit ist auch klar warum es so nicht geht.
Hallo" steht schreibt der jetzt knallhart eine "7" hin. Egal was wo wann wie. #define LEDon 128 PORTC = LEDon; | Präprozessor | | PORTC = 128;
-
Thread
Ausgang 1s High schalten ohne Schleife mit delay zu unterbrechen
{ ZaehlerIST = ZaehlerIST + 1; } else { PORTC |= (1<<PC5); continue; } Das ist mal eine Abfrage der Eingänge mit der Schleife. Jetzt leuchtet im Fehlerfall die LED an PC5, leider aber dann durchgängig. Ich würde sie aber gerne
verarbeitest Du dann Ereignisse, wie: while (1) { if (PINE & (1<<PINE2)) // Startsignal { PORTC |= (1<<PC5); // LED an ende=systemtimer+1000; } if (systemtimer>ende) { PORTC &= ~(1<<PC5); // LED aus } } Das geht natürlich auch mit anderen Timer-Frequenzen. Zur weiteren
-
Thread
LED als Sensor an Port Pin
ISR(TIMER0_COMPA_vect) { DDRC |= (1<<(PC0)); DDRC |= (1<<(PC1)); // beide Ausgänge PORTC |= (1<<(PC1)); // Phase EMIT PORTC &= ~(1<<(PC0)); asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop"); PORTC |= (1<<(PC0)); // Phase Reverse Bias PORTC &= ~(1<<(PC1
TIMER0_COMPA_vect) { > DDRC |= (1<<(PC0)); > DDRC |= (1<<(PC1)); // beide Ausgänge > > PORTC |= (1<<(PC1)); // Phase EMIT > PORTC &= ~(1<<(PC0)); > > asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop"); > > PORTC |= (1<<(PC0)); // Phase Reverse Bias > PORTC
-
Thread
Linux MPLABX XC8 usart.h nicht gefunden/vorhanden
finden. Das manuelle Durchsuchen von /opt/microchip (und aller Unterordner) brachte keine Ergebnisse. Geht das nur mir so oder fehlt die Bibliothek tatsächlich?
#pragma config WDTEN = OFF #pragma config WDTPS = 32768 // CONFIG3H #pragma config CCP2MX = PORTC1 #pragma config PBADEN = ON #pragma config CCP3MX = PORTB5 #pragma config HFOFST = OFF #pragma config T3CMX = PORTC0 #pragma config P2BMX = PORTD2 #pragma config MCLRE = EXTMCLR // CONFIG4L
-
Thread
AT90CAN mit sechs externen CAN-Controllern
AVR-CAN von Olimex) sechs externe CAN-Controller (MCP2515)über SPI zu steuern. Meine Frage ist ob das geht, und welche zusätzlichen Bauteile ich hierfür speziell noch dazu kaufen müsste.
das geht nur bei geringer bus-last, da die dinger keinen fifo/queue besitzen (nur 3 rx/tx) messages. wenn du wirklich 6+1 can bus brauchst und mit entsprechendes bus-last als can-gateway verwenden willst solltest
-
Thread
frequenz auslesen und auf lcd anzeigen
hdatei: [C] char buffertakt [50]; int zaehler; int zahl; int hz; int i; #define RS_1 PORTC |= (1<<PC7) #define RS_0 PORTC &= ~(1<<PC7) int wait () { _delay_ms(2); return 0; } int E () { PORTC |= (1<<PC6); PORTC &= ~(1<<PC6); return 0; } int ausgabe () { RS_0; PORTA
daran lags leider nicht...der interrupt geht immer noch nicht...
-
Thread
C komisches Verhalten
Simon Budig schrieb im Beitrag #3119288: > Das riecht nach WS2811/WS2812? Genau darum geht es ;) Hier mal der Code der L_High Funktion: void L_High() { PORTC |= 0b00000001; asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); PORTC
Die Datenausgabe würde dann über diesen HET laufen. Helfender schrieb im Beitrag #3119421: > Geht es vielleicht mit SPI? Nein geht nicht, da man bei SPI den Dutycycle nicht manipulieren kann.
-
Thread
ATXXMega128A1 und Hardware-SPI
als ZIP anhängen. Sieht jemand irgendwo das Problem? Denn manchmal, zum Beispiel gerade eben, geht es ja und manchmal nicht. Wenn ich das Projekt nur kompiliere und auf den XMega lade, geht es manchmal und manchmal nicht. Das ist sehr verwirrend. Ich hab schon so viel ausprobiert. Aber da es ja manchmal
Also ich nutze den SPI bei meinem Xmega so: [c] void SPI_init(){ PORTC.DIR = (1<<PIN4) | (1<<PIN5) | (1<<PIN7); //SS & MOSI & SCK PORTC.OUTCLR = (1<<PIN7); SPIC.CTRL = (1<<SPI_MASTER_bp) | (1<<SPI_ENABLE_bp) | SPI_PRESCALER_DIV64_gc; //prescaler 64 => 500 kHz
-
Thread
Ds18S20 schickt nur 1er über 1-wire Bussystem - Verständnisproblem
include <stdio.h> #include "UART.h" #include "1wire.h" int main(void) { DDRC=0xFF; PORTC=0xFF; USART_Init(103); sei(); rs232_printf("Test 1\n"); rs232_printf("Reset: %d\n", OWTouchReset()); //gibt 0 zurück rs232_printf("Test 2\n"); while(1) {
Sowas geht natürlich garnicht: if( (W1_IN & 1<< W1_PIN)==1 ) Nie in solche Bit-Tests auf ==1 testen, immer auf !=0.
-
Thread
AVR: Ausgang und Eingang?
Du hast aber hoffentlich das JTAG-Interface deaktiviert (JTAG-Fuse)? Wenn nicht funktioniert der PortC nur teilweise. MfG Spess
hast aber hoffentlich das JTAG-Interface deaktiviert (JTAG-Fuse)? > Wenn nicht funktioniert der PortC nur teilweise. Allerdings betrifft das nur PC2-PC5. Hier geht es um PC1.
-
Thread
AVR: Zu manipulierende Register wärend der Laufzeit bestimmen
void test( volatile uint8_t *reg ) { *reg = ...; } test( &PORTA ); test( &PORTB ); test( &PORTC );
Das geht in C mit Zeigern. Steht auch in der offiziellen AVR-Libc Doku was drin: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass
-
Thread
Zeitabhängige Spannungssteuerung
rtcGetHour(); stunde = bcdtodec(stunde); if ((stunde>=stunde_on) && (stunde<stunde_off)) { PORTC = 0x08; } else { PORTC = 0x00; } } ///////////////////////////////////////////////////////////////////////////// // Main-Funktion ////////////////////////////////////////////
entscheiden. Sicherheitshalber solltest du ihn aber auf jeden Fall melden! Zb. in dem eine LED an geht! > weil dies eigentlich nur eine simple Funktion bieten sollte ohne weitere Es ist NIE einfach nur 'simpel'. Sobald man reale Projekte machen will, abseits vom Übungstisch, kommt man um eine
-
Thread
ATMega32U4 power down: komme nicht auf <1mA
0x00; DDRD = 0xFF; PORTE = 0x00; DDRF = 0xFF; PORTF = 0x00; DDRF = 0xFF; PORTC = 0x00; DDRC = 0xFF; PORTB = 0xFF; DDRB = 0xFF; [/c] while(1) verbraucht übrigens weniger Strom als set_sleep_profile(SLEEP_MODE_PWR_DOWN); sleep_cpu();
empfieht oft auch, die I/O Pins per Software als Eingang mit Pull-Up konfigurieren. Im Power-DOwn Modus geht das aber nicht, weil die Pull-Ups dann immer daktiviert sind (soweit ich weiß). > Lege ich den Finger an die Chipseite mit den Clock-Pins, sinkt der > Strom auf 1.5mA. Weil der Finger die Pins
-
Thread
Macro für Arrayinitialisierung
if (port==PORTA) return (1L<<(bit+24)); if (port==PORTB) return (1L<<(bit+16)); if (port==PORTC) return (1L<<(bit+8)); if (port==PORTD) return (1L<<(bit+0)); [/c] Ich weiß, das ist KEIN funktionierendes Macro, es geht ums Prinzip. Geht das überhaupt? Oder wird da das Macrokonzept überfordert
vergleicht den Inhalt von PORTA mit port. >Den kann der Compiler aber nicht wissen;) GENAU! So geht es! WOW! Danke! [c] #define PAT(port, bit) ((port==&PORTA) ? (1L<<(bit+24)) : ( \ (port==&PORTB) ? (1L<<(bit+16)) : ( \ (port==&PORTC) ? (1L<<
-
Thread
ADC Pin am PIC16F1936 richtig über Interrupt einlesen
Das gilt auch für das Mikrofonsignal. Wenn du "Interrupt-on-change" benötigst (was nur am PORTB geht), legst du eben 1 DIP-Schalter Anschluß auf einen der freien PORTC-Pins.
Chris B. schrieb im Beitrag #3103923: > Wenn du "Interrupt-on-change" benötigst (was nur am PORTB geht), legst > du eben 1 DIP-Schalter Anschluß auf einen der freien PORTC-Pins. Das Projekt ist soll ein "Tausche den Chip und sei glücklich" bleiben. Sprich der original Scheinwerfer + leerer PIC soll
-
Thread
ATmega8 läuft um den Faktor 10 zu langsam
>doch macht es. >PORTC ^= (1<<0); Nein. XOR ist immer: IN Rxx, PORTC EOR Rxx, 0x01 OUT PORTC, Rxx JMP zurück Aber das sollte man im ASM-Listing erkennen. Da kann man zählen. Diese vier Befehle sollten acht
tust. Dieser syntaktisch wunderschön aufgedonnerte Bullshit: > while(1) > { > PORTC ^= (1<<0); > } wird vom Compiler (ohne Optimierung) nämlich (bestenfalls) etwa so ausgedrückt: loop: in reg1,PORTC ;1 ldi reg2,1<<0 ;1 eor reg1,reg2 ;1 out PORTC,reg1