-
Thread
STK500 Atmega8515 und einfaches C-Programm
AVR Prozessoren nicht zwei Port - Anweisungen direkt nacheinander ausführen kann. Also sprich ich kann nicht an Port D einlesen und direkt danach an Port B etwas ausgeben. Ich weis nicht ob ich das richtig
allerdings nicht. Vielleicht könnt ihr mir ja weiterhelfen! MFG BlueMorph [c] #include <avr/io.h> #define ausgang 0xff #define eingang 0x00 #define all_leds_out 0xFF int main (void){ uint8_t bPortD; DDRB = ausgang; DDRD = eingang; PORTB = all_leds_out; while
-
Thread
multiplexing mal anders
gestehen ich hab bis jetzt nur mit ATMEGA's <= 32 gearbeitet. Lt. Datenblatt ist das ISP-Interface an Port B angeschlossen, allerdings sind die SPI-Pins an Port A (an welchem auch die Analogports sind) Wenn die ISP-Pins mit den Analogports geshared werden, befürchte ich, dass ich das Teil im eingebauten
>Wie programmiere ich den Chip? ISP >Lt. Datenblatt ist das ISP-Interface an Port B angeschlossen, allerdings >sind die SPI-Pins an Port A (an welchem auch die Analogports sind) ISP ist an PortA >Wenn die ISP-Pins mit den Analogports geshared werden, befürchte ich, >dass
-
Thread
Hausbus: Zentral oder Dezentrale verdrahtung?
auf Rückbau als auch auf käufliche Module große Vorteile. Ich glaub ich werde mich in das Projekt einlesen. Wer weiß, vielleicht gibt es ja dann eine Variante mit einem PIC µC :-) Danke für den Tipp!
Hallo Marco - Die 'Selbstbau AVR Variante' kenne ich nicht. Wo soll die sein? Natürlich hatte ich mir das Datenblatt des TDA5051A angesehen, es aber verworfen. AM halte ich auf einem vor allem durch AM-Störungen behafteten Medium
-
Thread
Pin wird nicht richtig gelesen
datenblatt gezeigt wird: [avrasm] ... ; Define pull-ups and set outputs high ; Define directions for port pins ldi r16,(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) out PORTB,r16 out DDRB,r17 ; Insert nop for synchronization nop ; Read port pins in r16,PINB
als 0 interpretiert, je nach Windrichtung und Laune. Schalte einen ausreichenden Delay vor das Einlesen des Ports - das eine nop reicht nicht aus - das wird für die interne Logik des Controllers gebraucht.
-
Thread
ATmega8. Umbau als 2GHz Frequenz-Logger
verbunden) 13 DB6 14 DB7 Anstelle des LCD-Moduls möchte ich die empfangenen Frequenzen in den PC einlesen und (mit einem selbstgeschriebenen Basic Programm) grafisch darstellen bzw. loggen. Die Datenverbindung könnte zum Beispiel durch den seriellen Port oder durch den Druckerport geschehen. -Muss
1 + Pin 13 sind Inputs)(2,12 Master Reset)(Pin 6+8 sind Outputs) Pin8 geht am AVR zu Pin 11,Pin 12 geht am AVR zu Pin 3 PS: Der IC 74HC00 ist ein Quad Nand mit je 2 Inputs (Gehäuse DIP14)
-
Thread
AVR Tiny2313 Pinzustand PB3(OCI) in ISR abfragen
Hallo zusammen! Ich habe folgendes Probelm. Und zwar weiß ich nicht, wie ich den Zustand eines bestimmten Pins innerhalb einer ISR abfrage ... bzw. ich weiß nicht warum es nicht funktioniert. Es handelt sich explizit um den Pin PB3(OCI) eines ATTiny2313. An IRs nutzte ich den Capture-, Match-, sowie den Timer1-Overflow-IR. Ich möchte jetzt innerhalb der Cap-ISR den Zustand meines Ausganges (PB3(OCI)) abfragen um entsprechend reagieren zu können. Genau diese Abfrage funktioniert aber nicht. Andere Pin-Zustände in der ISR abzufragen klappt hingegen. Ich stehe z.zt. voll auf dem Schlauch :/ ... Vllcht
-
Thread
DS1620 - Auslesen der Temperatur?
i=0; i<9; i++) { PORT_DS1620 &= ~(1<<CLK_DS1620); result = (result>>1); if (PIN_DS1620 & (1<<DQ_DS1620)) result |= (1<<8); PORT_DS1620 |= (1<<CLK_DS1620); } DDR_DS1620 |= (1<<DQ_DS1620); //
char i=0; i<9; i++) > { > PORT_DS1620 &= ~(1<<CLK_DS1620); > result = (result>>1); > if (PIN_DS1620 & (1<<DQ_DS1620)) > result |= (1<<8); > PORT_DS1620 |= (1<<CLK_DS1620); > } > DDR_DS1620 |= (1<<DQ_DS1620
-
Thread
taster mit atmel8
Hi, ich bin noch AVR Anfänger, und hab auch mir auch schon das AVR Tutorial angeschaut. Nun habe ich noch eine Frage, wie ich eine Taster Einstellung einlesen kann. Ich habe an Port D, Pin 2 und Pin 1 jeweils einen Taster angeschlossen, mit dem ich an Port C, Pin 0 und Pin 5 eine LED schalten möchte. Hier mein Code: #define F_CPU 100000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdint.h> void io
-
Thread
Drehgeber per Interrupt auslesen, wieviele Interrupteingänge muss ich belegen bei Atmega64
ein analoger port, kann ich das ding trotzdem daran betreiben?
> Was meinst du mit "Pollen" :) Er meint zyklisches Einlesen des Ports in regelmäßigen Zeitabständen (z.B. durch Timer-Interrupt synchronisiert). Verfolge einfach die Links von Peter, etwas Besseres wirst Du nicht finden. Die Routinen sind sooo gut, dass
-
Thread
Unterbrechen eines Befehls durch ISR
Ja, aber das ist das Problem, welches der Threadsteller meint: Hauptroutine: Variable = PortB; Variable |= 0x00010000; <- Jetzt schlägt der Interrupt zu, der ein Flag setzt. TMP = PortB; TMP |= 0x10000000; PortB = TMP; <- Zurück ins normale Programm PortB = Variable; Und
Das ist aber nicht das gleiche. Wenn Du nur einige Pins ändern willst, musst Du trotzdem vorher den Port einlesen.
-
Thread
Modellhaus Beleuchtung
> hab aber keine ahnung wie ich das in den mikrocontroller > reinprügeln soll. AVR-Studio und ein paar Zeilen Assembler: 1 Zähler hochzählen (z. B. im Sekundentakt) 2 Tabelle mit Schaltzuständen aus Flash einlesen 3 Wert aus Tabelle holen 4 auf Port ausgeben 5 weiter mit 1
Schieberegister IC's hintereinander schalten, so dass du 3*8=24 Ausgänge hast. Deshalb nennen manche sie auch *Port-multiplikator* :) Ich würde an den Ausgängen des IC's immer einen Transistor verwenden, also je LED einen BC547C oder BC846 ...
-
Thread
Software-UART (AVR304) empfängt nur Müll
Aalso ich hab mir die AppNote AVR304 etwas angepasst und mir ein Testprogramm geschrieben, welches Daten vom PC empfängt und an diesen zurück gibt. [c] ... for( ; ; ) { // Wenn Daten am SW-UART angekommen sind if
Du könntest z.B. damit anfangen, das Einlesen des Pins ganz an den Anfang der COMPA-ISR zu verlagern (noch vor das switch). Und dann kannst du einen Blick in den Asm-Code werfen, und abzählen, wie viele Clocks Versatz du in den beiden ISRs zusammen
-
Thread
Frage zum Einlesen eines Portregisters in Assembler
Hallo, ich warte noch auf mein STK500 und mit AVR Studio habe ich mich auch noch nicht auseinander gesetzt. Dennoch mal eine Frage: Mit ldi r20,255 out ddrc,r20 out portc,85 wir PortC zum Ausgansport und die Portpins sind abwechseln High und Low. Frage: Kann ich zu einem späteren Zeitpunkt in meinem Programm abfragen, wie die Portpins gesetzt sind? Also mit ldi r20,0 out ddrb,r20 wir PortB zum Eingangsport und mit in r20,pinb bekomme ich das "anliegende Byte" in das Register r20. Geht sowas
-
Thread
bitweise Daten auslesen und verarbeiten
Es gibt fertige Bibliotheksfunktionen zur Umwandlung von Zahlen in ASCII-Strings. Wenn Du den AVR-GCC mit der AVR-libc benutzt, heißt die gesuchte Funktion /itoa/, steht in der stdlib, und wie die funktioniert (also was für Parameter sie erwartet), steht in der Bibliotheksdokumentation: [pre]
Ausgangswerte /vor/ der Konvertierung nach ASCII "rechtsbündig" auszurichten. Entweder direkt beim Einlesen (also bei dem Zweizeiler mit den Schiebeoperationen) oder direkt vor der Wandlung. Wenn Du alle 16 Bits gewandelt hast, kannst Du auch einfach den Nullterminator an die entsprechende Stelle setzen
-
Thread
Programm zum MC68HC11 auslesen und programmieren
Seriennummer und den Code für deine Testversion frei. Ansonsten ist es vieleicht besser auf die AVR-Mikrocontroller umzusteigen. Entwicklungsumgebung kostenlos ( AVR-Studio ). Ich denke ein wiedereinstieg in den HC11 ist fast so schwierig, wie das einarbeiten in ein AVR. Wahrscheinlich bekommst
wirklich nur raten was ich Dir gerade zum AVR geschrieben habe. Bernd_Stein
-
Thread
Kugelschreiber mit Barcodescanner bei Pollin
Admin ... Ähhm, ist ein relativ neues Dell-NB, hab grad festgestellt, dass das gar keinen COM-Port hat ;-)
dass derselbe Dongle immer dasselbe Com Port bekommt.
-
Thread
Günstiges DSO Oszilloskop mit üppiger Ausstattung - 100 MHz, 1 GS/s - von Uni-Trend
~ 50s/div Trigger Type: Edge, Pulse, Video and Alternate Automatc Wavefrm Meas.: 28 Ports Standard: USB Device, USB Host and RS-232C, Optional: LAN Mathematics: Add, Subtract, Divide, Reverse and FFT Applications: College Education, R&D, Electronic product
dann wieder durch ein neues ersetzt werden muss. Bis vor wenigen Jahren habe ich alles rund um den AVR mit einem Philips Oszi von 1969 gemacht. Hat auch gut gepasst. Gruß, Ulrich
-
Thread
[AVR]Fragen zur C Programmierung (Timer / multiplexing)
machen? Ohne Schmitt-Trigger. Dann habe ich halt ne fallende Flanke, ist aber egal, kann man beim AVR ja einstellen.
Flankenerkennung: http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29 Peter
-
Thread
Alternative zu PORTB.0
glauben geneigt ist. >>Zweitens bleiben die Zugriffe atomar was sie bei > FALSCH! Es geht um avr-gcc und PORTB von ATmega16, welcher im I/O-Bereich liegt.
nicht. Hoppla. Hatte ich wohl was falsches im Hinterkopf. Aber wir haben hier auch ziemlich viele AVR Tapen im Einsatz. Da kann man schon mal den Überblick verlieren ;-)
-
Thread
AVR Rom über USB auslesen
gedacht, das ich mit visual basic (vb wegen dem einfachen erstellen von forms) per button den wert einlese und einem label zuweise. mit dem usart habe ich ja nen virtuellen com port(port 3). aber wie greife ich nun an die speicherzelle des wertes auf dem µc zu?
Programmiersprache darf's denn sein? Für C empfehle ich mal beispielhaft folgendes: http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html Wie Du das ganze per UART loswirst, kannst Du z.B. hier im Wiki http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART nachlesen. Oder habe *ich
-
Thread
Drehencoder entprellen, aber wie?
drehgeber_step(void); static inline char drehgeber_job(void); #if defined (__GNUC__) && defined (__AVR__) # include <avr/pgmspace.h> #else # define PROGMEM # define pgm_read_byte(x) (*(x)) #endif // avr-gcc // Aufrufen, wenn eine Flanke an einem der Ports festgestellt wurde, // zB aus
0 }; static uint8_t a_alt; uint8_t a = a_alt; if (IS_SET (PORT_DREH_A)) a |= (1 << 2); if (IS_SET (PORT_DREH_B)) a |= (1 << 3); a_alt = a >> 2; return (char) pgm_read_byte (& drehgeber_transitions[a]); } // Mein Drehgeber
-
Thread
Komisches Problem: ein Controller geht der andere nicht (gleiches Programm)
genau auf dem Controller und läuft über den gleichen USART. Hier der Quelltext: [c] #include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> #include <util/delay.h> #define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden! #define UBRR_VAL
Interrupt Routine if (ucUDR_valid1) uiVerloreneZeichen1++; //Empfangenes Byte in ucUDR1 einlesen ucUDR1 = UDR1; //ucUDR_valid1 setzen ucUDR_valid1 = 1; } [/c] tritt der Fehler auf.
-
Thread
AVR-NET-IO Port-Status in EXCEL implementieren
Hallo, kann mir jemand sagen was ich machen muss, damit ich meine gesetzten Ausgänge vom AVR-NET-IO (mit der Radig-Software) in EXCEL über Ethernet oder RS232 einlesen kann? Habe schon einiges gelesen und probiert, aber nichts funktioniert. Vieleicht benutzt ja schon jemand ein VBA Prog., das läuft. Gruß Andreas
-
Thread
kleiner Webserver gesucht Rs232 -> Ethernet
Habe auch schon an eine auf Linux umgebaute Fritzbox gedacht, die ist ja eh immer an und am USB Port könnte man dann einen USB->RS232 Wandler stecken. Pascal Compiler soll es ja auch für Linux geben. Dazu muß ich mich aber auch erst einlesen... Da habe ich aber ehrlich gesagt wieder angst, wenn das
hier mit SDK gemeint? http://de.wikipedia.org/wiki/Software_Development_Kit gibt es also beim X-Port eine Entwicklungsumgebung ähnlich dem AVR-Studio dazu? Wenn das so ist dann wird wohl die Programmiersprche wieder C sein? Dann ist es wohl wirklich am besten erstmal alles über den Virtuellen COM
-
Thread
Nachbaubares Funkmodul auf Basis des RFM12
avr-libc 1.6.2 avr-gcc ist noch der letzte 3er
Oder einfach die vorhandenen Seiten ergänzen: [[RFM12]] [[AVR_RFM12]] [[RFM12_Protokoll_Stack]] [[Pollin_Funk-AVR-Evaluationsboard]]
-
Thread
ATMega 8535 und Analoge Signale die nicht ganz konform sind
Schmittrigger vorzuschalten. Und wenn da noch ADC-Kanäle frei sind, könnte man die Spannung auch analog einlesen und dann anhand eines Schwellenwertes in high/low einteilen
. >Nur werden mir diese Pins als LOW erkannt, obwohl da noch 2,1V anliegen. Ist doch OK. Der AVR hat schon Schmitt-Trigger Eingänge. MfG Falk
-
Thread
Komisches Verhalten von leds/taster
allerdings leuchteten die LEDs 6 und 7 nicht. (Habe PORTB und PORTC benutzt). Als ich dann anschließend PortD benutzt habe, ging es wieder. Heißt das, dass ich jetzt nur noch PortD benutzen kann? Das kann es ja nicht sein oder? Danach habe ich noch ein kleines Testprogramm geschrieben, beidem über PortB die
DDRC, r16 ; C als Eingang ldi r16, 0xFF out DDRD, r16 ; D als Ausgang out PortD, r16 ; Alle Lampen aus loop: in r16, PinC ; PinC einlesen com r16 ;r16 invertieren out PortD, r16 ; Lampen ein rjmp loop Der einzige Unterschied von dem Programm zu
-
Thread
PID Regelung mit Widerständen myAVR in C
//////////////////////////////////////////////////////////////////////// // LCD-Funktionen für myAVR-Board + myAVR-LCD // 4-BitModus an PortD Bit 4-7 // PortD Bit 2 = RS, high=Daten, low=Kommando // PortD Bit 3 = E, high-Impuls für gültige Daten //--------------------------------------------
---------------------------------------------------------------- // lcd_init(..) - Schaltet die Ports und Initialisiert das LCD //--------------------------------------------------------------------------- void lcd_init() { // Port D = Ausgang DDRD=0xff; PORTD=0; // warten bist LCD-Controller
-
Thread
Stromversorgung Akku für µC - Welche Technologie?
willte den großen Ram von 8k haben um n bischen Puffern zu können - z.B. die Fat nicht immer neu einlesen ) verwenden und dann eine Speicherkarte (SD ca 4-8 gb [FAT32]) implementieren. Als decoder wollte ich den bei R erhältlichen MP3-Decoder (VS1011ES) benutzen. Später soll auch mal ein Display (EA DOGM132W
bekommen und genauer Uptimer (etwa ne sec auf ne Woche Fehlgang p.s. war mir genau genug). Also das AVR-GCC tut hab ich seit längerem durch und hab mich dann erstmal der C++ Programmierung zugewendet um dann PC seitig gescheit auf µC Signale reagieren zu können. Inzwischen geht das bis zum Anfang von
-
Thread
Eingangsschieberegister 74HCT165 in C
nicht drauf wo... [c] // zur leichteren Behandlung erstmal Makros definieren // DPORT ist der Port, an dem die Daten seriell gelesen werden (sollen) // CPORT clock // RPORT parallel Load #define __SRI_DPORT__ PINC #define __SRI_DDDR__ DDRC #define __SRI_CPORT__ PORTD #define __SRI_CDDR
SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin) #define SPI_CLK SBIT( PORTB, 0 ) // clock #define SPI_CLK_DDR SBIT( DDRB, 0 ) #define SPI_MISO_PIN SBIT( PINB, 2 ) #define
-
Thread
SPI-Problematik (Daten Übertragung und andere Portc gestört)
for SPI #include <avr/io.h> #include <avr/interrupt.h> //CPOL = HI //CPHA = HI // LSB first void SPI_MasterInit(void) { SPSR = (1<<SPIF) // Soll Laut uC-Buch beim Init einmalig gesetzt werden // Setup SPCR
Also, folgende Fehler behergt mein eigentliches Test-File zum weiterarbeiten: 1.) Bei weiterem PortX-zugriff (z.B. PORTC (laut Datenblatt) reiner Input/Output-Port ohne Doppelbelegung)andere Ports, keine Änderungen) keine Ausgabe von Daten über MOSI möglich (MOSI bleibt Idle High, Kein SCK mehr)
-
Thread
Toggelgeschwindigkeit für Ports
Optimierung ist es nicht sonderlich schnell, da du ja den Compiler anweist, dass er jeweils den Wert des Ports erst wieder einlesen muss -- obwohl das für deine Funktion (Emulieren des SPI- Taktes) gar nicht notwendig wäre. Eine entrollte Schleife wäre nach der Hardware-SPI (weiß der Geier, warum du die
. Das hatte ich in meinem ersten Eifer dann einfach mal so "runterprogrammiert", nach dem Motto: Ports setzen, Takt simulieren mittels toggeln, Ports neu setzen, nochmal toggeln usw. Das funktionierte dann nicht und ich fing an mir Gedanken zu machen, ob das eventuelle am Takt liegen könnte und ich
-
Thread
USBasp+AVRdude+libusb=MEGA-STRESS
seite verlinkt hat. Habe jetzt Avrburner drauf, Device auf m32 gestellt, Programmer ist usbasp und Port ist USB. --> Return-Code des Programms: 1 ---Errors--- error at C:\Mikrocontrollerprogrammierung\WinAVR-20080610\bin\avrdude.conf:385 unrecognized character: "u" Was ist mein nächster Schritt?
configuration file is "C:\Mikrocontrollerprogrammierung\WinAVR-20080610\bin\avrdude.conf" avrdude.exe: WARNING: -E option not supported by this programmer type Using Port : USB Using Programmer : usbasp
-
Thread
Temperaturüberwachung mittels Linux PC
Manuel M. wrote: > Wäre es möglich einen kombinierten Controller zu bauen welcher nur einen > COM Port belegt? Oder muss ich für die Tempertaurmessung sowie für die > Laufzeitmessung getrennte verwenden? Es gibt auch 1-Wire Devices mit 1-Bit I/O-Port. D.h. es lassen sich alle Sensoren, ob analog
Händler nur 2,45 kostet - vielleicht ist er im Versandhandel mittlerweile auch billiger geworden. Ein AVR-Webserver ist m.E. overkill, wie schon jemand schrieb, wenn der AVR-Server nicht aus anderen Gründen ohnehin läuft. http://www.weppners.de/pics/lintemp/schaltplan_big.jpg Warum aber eine externe
-
Thread
Tangens sprengt die Codemenge
um sie hinterher auf die Dauer des High-Pegels zu analysieren? Das könnte man doch sofort beim Einlesen der Signale tun, indem man auf die Flanke wartet (entweder gepollt oder per Interrupt) und auf den Timer schaut, wann sie eintrifft. Arrayzugriffe kosten auf dem AVR nicht nur viel Programmspeicher
erst einmal nur > stumpf einzulesen überrascht mich. Ich dachte es gibt nichts > schnelleres als Port einlesen und abspeichern. Nicht, wenn die direkte Messung so einfach ist, wie in diesem Fall. So oder so ähnlich hätte ich's gemacht: [c] uint8_t tper, thigh; // warten auf steigende
-
Thread
ADC Erfassen ohne Uref
Gast) >Dateianhang: ADC_Schaltung.JPG (98,5 KB, 3 Downloads) 1.Tip [[Bildformate]] 2. Tip [[AVR-Tutorial: ADC]] 3. Tip http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29 >Kann es sein das ich es Falsch angeschossen habe? Da fehlt einiges. >
uint16_t Temperatur; ADMUX = (1<<REFS0) | (1<<MUX0); // Referenzspannung von AVCC nutzen //PortA0 [/c] was soll das "char temp1;" zwischen Funktionsname und Funktionscode? Gruß, CowZ
-
Thread
BASCOM: einzelne Pins in Byte speichern
Ich habe an PinD.0/PinD.1/PinD.2/PinD.3 einen DIP-Schalter angeschlossen. Die anderen Pins von PortD sind auch verwendet. Jetzt möchte ich gerne den DIP-Schalter auslesen und den Wert, den die Pins haben in ein Byte speichern und damit dem AVR eine Adresse von 1-16 zuweisen. Den ganzen Port kann
Du nimmst den gesamten Eingangsport und Maskierst die unteren 4Bits aus: 0..15: adresse = ( port & 15 ); 1..16: adresse = ( port & 15 ) + 1;
-
Thread
So brachte ich meinen AVR-Net-IO (Pollin810058) zum Laufen!
Hallo AVR-Gemeinde ich beschäftige mich seit kurzem mit dem AVR Net IO. Nach mühsamen Anfangsschwierigkeiten habe ich das Teil nun einigermaßen am laufen. Aber!! Wenn ich dem Teil über Putty eine neue
Hallo Es ist nicht möglich die Adresse des AVR-NET-IO von 192.168.0.90 auf die 192.168.2.90 zu ändern.Alle Versuche sind gescheitert.Könnte das IC MAX 232N defekt sein
-
Thread
AVR programmieren mit TwinAVR funktioniert nicht
"RESET" vom ISP-Programmieradapter Skizze wie es z.B. im AVR-Tutorial aussieht http://www.mikrocontroller.net/articles/Bild:Avr-schaltplan-1.gif (aus http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment ) # ADD: Checke vorher im Datenblatt
stefan wrote: > Bei TwinAVR gibt es die Möglichkeit im Setup festzulegen > ob der Reset-Eingang des AVR nach der Programmierung Hi-Aktiv oder > Lo-Aktiv sein soll. Nein. Der AVR gibt dir vor, wie der Pin9 reagiert. Du
-
Thread
Lauflicht mit Taster
nicht so recht weißt, was du mit den befehlen eigentlich tust. das ganze &- und |-gefrickel mit einlesen und ausgeben... ich empfehle [[Bitmanipulation]] und http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Bitfelder abwärts
[c] KeyStateOld = KeyStateNew KeyStateNew = [einlesen vom Port] IF (KeyStateOld==1) & (KeyStateNew==0) { // Tastenzustand hat sich von "nicht gedrückt" // zu "gedrückt" geändert k++ IF (k==4) { k = 0
-
Thread
8 Frequenzen messen (ATmega)
8 Rechtecksignale mit einer Frequenz um die 20-40Hz an. Ich schreibe die Programme mit Basecom AVR und hab bisher nur Beispiele/Lösungen mit Timern gehört. Aber ich hab nun mal nicht genug Timer um alle Frequenzen gleichzeitig zu messen. Das Puls/Pausenverhältnis des Rechtecksignal ist 50/50
du kannst den Timer mit 1000 Hz (oder noch schneller) laufen lassen und jeweils einen Port einlesen und mit dem zuvor eingelesenen Wert vergleichen. Somit kannst du den Flankenwechsel erkennen. Wenn kein Flankenwechsel statt findet, so erhöhst du einen Zähler. Beim Flankenwechsel speicherst
-
Thread
bit schieben mittels schalter in C
µSekunden. Auch wenn der Code korrekt sein sollte, so werden (scheinbar) alle LED's leuchten. Wenn du den AVR-GCC verwendest, dann füge ein #include <util/delay.h> ganz oben ein und du kannst dann die funktionen _delay_ms( zeit ) verwenden. Grüße, Florian
x ausgeben } [/c] Ist die Taste gedrückt, wird x um eins weiter geschoben. Danach wird x am Port B ausgegeben. Dann beginnt die Mainloop von vorne. Bis hierher sind ca. 1-5µs vergangen, und die Taste ist _garantiert_ immer noch gedrückt. Also wird x um 1 nach links geschoben, dann wird x an Port
-
Thread
Dopplerpeiler ans Internet anbinden (FAT/SD/ETH/HTTP) AVR/ATMEGA644
Kommunikationsprotokoll nur Start/stop/replay an den Chip senden und anschließend die Daten abholen. Der Haupt-AVR kann sie dann gemütlich auf die SD-Karte schreiben. UART- Kommunikationsprotokoll könnte wie folgt aussehen: ( > = zum Sound AVR, < = vom Sound AVR ) > REC < OK > STOP < OK, 123456 Bytes >
aber auf einem AVR wirst du trotzdem noch die von mir genannten Probleme haben.
-
Thread
ADCwert auf LCDausgeben
Declare your local variables here unsigned int temp=512; char LCDbuffer[20]; // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization