-
Thread
Servo-Signal auslesen mit Atmega 8 - wo liegt der Fehler?
Ein paar Beispiele in Bascom findest Du hier, da ist auch was mit Einlesen von Servoimpulsen dabei: http://www.mikrocontroller.net/topic/238759#2427387 ...
Loop Until Portb.0 = 0 Stop Timer1 End If If Timer 1 > 1500 Then Portc.5 = 1 Else Port C.5 = 0 Loop [/code] Das ist extrem quick'n'dirty aber soll Dir nur das Prinzip aufzeigen. Gruß, Norbert
-
Thread
µC-PCC, PC-Programm zum steuern von Mikrocontroller
nur die Basisfunktionen, die unterstützt werden: Digitaleausgänge schalten, Digitaleingänge einlesen Analogeingänge einlessn (auswählbare Referenz) periodisches Einlesen beliebiger Kanäle (Open Format für Logview) PWM und Counter steht noch ganz oben auf der Liste Falls meine Vermutung bezüglich
nur die Basisfunktionen, die unterstützt werden: > Digitaleausgänge schalten, > Digitaleingänge einlesen > Analogeingänge einlessn (auswählbare Referenz) > periodisches Einlesen beliebiger Kanäle (Open Format für Logview) > PWM und Counter steht noch ganz oben auf der Liste Veröffentliche es doch
-
Thread
Problem mit unterschiedlichen Prescalern
hast dann aber immer noch das grundsätzliche Problem nicht gelöst. Das besteht darin, das Du das einlesen und verarbeiten der Daten mit einem Minimum an Interruptsperren, bzw. einer minimalen Zeit während der die Sperre gilt, erledigen musst. Im konkreten Fall, hast Du ja noch andere Timer-Interrupts
Das war auch mit USB [c] #include <avr/io.h> #include <util/delay.h> #include "usb_serial.h" #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) int main(void) { CPU_PRESCALE(0); usb_init(); _delay_ms(500); DDRD
-
Thread
Assembler Grundlagen (einbinden) (ATxmega128A1 + AVR Studio 5)
ich folgendes herausfinden kann: - einbinden eines Assembler Unterprogramms in ein C-Programm in AVR-Studio 5 - Übergabe einer Variablen (ein Array) an dieses Unterprogramm - einlesen eines Pins in Assembler bei einem ATxmega - und schreiben dieses Wertes in diese globale Variable Wenn mir jemand
Das bereits erwähnte AVR GCC Inline Assembler Cookbook erklärt das. Das ist allerdings nicht anfängerfreundlich - es ist halt kein Thema für Anfänger. Es kann helfen, aus zwei Quellen gleichzeitig zu lernen. Im Roboternetz-Wiki
-
Thread
Taster - externen Interrupt Problem
euch helfen. Ich danke euch! Hardware: ATTiny2313, läuft mit 1MHz Code: [c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdint.h> #ifndef F_CPU #define F_CPU 1000000 // processor clock frequency #warning kein F_CPU definiert #endif /
Dannegger geht ja vom invertierten Zustand also Pullups aus. Bei tasterbetätigung liegt eine 0 am PIN-Port
-
Thread
Emitterschaltung mit AVR und BC639
Transistor nicht genug Strom liefern kann. Meine Frage ist nun, wie ich mit dem AVR einen BC639 schalten kann? +12V o------------------------+ | .-. ( X )
Wert herunter gezogen. Der Strom wird dann nur durch die Innenschaltung des µC (Treiberleistung des Ports) begrenzt und ist nicht genau kalkulierbar. Du wirst den µC daher wahrscheinlich überlasten! Gruß Dietrich
-
Thread
switch-Anweisung AVR
Hallo zusammen, ich habe ein Problem mit dem switch Befehl.Ich möchte vom Port D die Bits 2 bis 6 einlesen um 19 Eingangskombinationen auszuwerten. Leider fällt der switch direkt zu default durch. Ich habe folgendes programmiert: switch (PIND) { case 0x04: Anweisungen; break; . . . case 0x4C: Anweisung; break; default: Anweisung; break; } Ich weiß leider nicht mehr weiter und benötige Hilfe. Danke schön.
-
Thread
AM oder FM Fernbedinung Rohrmotor -> bild
mit Funksteuerung 433,92Mhz. Damit habe ich das ganze Haus bestückt. Ich kann jetzt die Rollos per AVR steuern ( Beschattung, Morgens , Abend, Urlaub usw. ). Den Sendecode habe ich mit dem AVR nachgebaut ( ATmega8) + 433,92mhz AM Sendemodul. [c] #include <avr/io.h> #include <stdio.h> #include
Welche Entwicklungsumgebung nutzt du eigentlich? AVR Studio4? Bist du mit deinem "raspberry" zufrieden?
-
Thread
Lichtschranke anschließen Atmega16
ich was bestimmtes beachten? Hier ein ganze simples kastriertes Programm von mir [c]#include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> #include <stdlib.h> #include <util/delay.h> #include <avr/pgmspace.h> #define PORT_LED PORTC /* PORT C ZUM BETRIEB DER 'LEDs' */ #define PIN_LIGHT PINA /* EINLESEN DER PINS 'A'*/ #define LightBarrier1 PA7 /* Lichtschranken Signale */ int main(void) /* PROGRAMM START */ { DDRC = 0xff; //PORT C = Output DDRA=0x00;
-
Thread
made from scratch Firmware für Wittig/Welec Oszilloskop W20xxA
Konzept gefällt mir. Ich werde mich mal etwas genauer in die Theorie des Model View Controllers einlesen. Grundsätzlich hört sich das sehr gut an, wir müssen aber mal sehen wie sich das performanceseitig auswirkt. Gruß Hayo
Perl script. Under Windows you can use the free Active Perl. Also you have to install the Serial Port module. All that is described in "how to upload via shell script" . Did You consider this? Kind regards Hayo
-
Thread
LCD Display HD44780 - Nur die rechte seite Funktioniert
[c]#include <avr/io.h> #include <util/delay.h> #define LCDDataPort PORTB #define LCDDataDDR DDRB #define ControlPort PORTD #define ControlDDR DDRD #define Enable 5 #define ReadWrite 7 #
eine kastrierte Initialisierung? Mach es doch einfach mal so wie im Datenblatt. > while(LCDDataPort >= 0x80){ > PeekABoo(); Das passt nicht. E auf H Einlesen E auf L MfG Spess
-
Thread
Anfänger mit Problemen im AVR GCC-Tutorial
Das vermute ich auch, denn avr/io.h müsste für die Registerzugriffe reichen, siehe auch: http://de.wikibooks.org/wiki/C-Programmierung_mit_AVR-GCC/_Register
Der Mega2560 ist doch ein ganz normaler Mega (nicht aber der XMega). D.h. die Tutorials hier [[AVR-Tutorial]] [[AVR-GCC-Tutorial]] sind vollinhaltlich sinngemäss anwendbar. Wozu brauchst du da Device-Driver?
-
Thread
taskmanager mit definierter zeit funktioniert nicht
überlaufen wird, was mit (if bit is set) ja abgefragt wird, eine meldung. hab jetzt mal ein anderen Port benutzt komischerweise treten jetzt keine fehler mehr auf was bei Portb 4 noch der fall war
Zeit abgelaufen ist? Passiert das auch, wenn man keine Interrupts verwendet? Kann das jemand mal mit AVR-Studio testen? Ich habe gerade keines zur Hand.
-
Thread
ATMEL Eval Board 2.0.1 Test-Software
'setzte den Pin 7 von Port D auf high Waitms 500 'Warte 500 ms Portd.7 = 0 'setzt den Pin 7 von Port D auf low Return
Ach. Hab das überlesen: Du benutzt ja PonyProg. http://www.mikrocontroller.net/articles/AVR_Fuses#Taktquellen_Fuse_Einstellung
-
Thread
RFM01/02 Basics
'Uart-Interruptroutine deklarieren Enable Urxc Enable Interrupts und dann die ISR zum einlesen, (außerhalb der do-loop Schleife): Onrxd: incr n Tx(n)=UDR 'Uart-Daten ins array einlesen return Im Hauptprogramm dann n > wert abfragen, wenn ja ->senden & danach n auf 0 setzen
ja gleich zum senden des arrays?! sind 100ms eine ausreichende wartezeit? warum wird das einlesen der daten eigentlich beim senden des arrays unterbunden? lg
-
Thread
Pin geht nicht auf 5V
Nimm anstatt Portc.0 = 1 mal PINC.0 = 1. Gruß avrGerd
Stimmt, hast Recht spess53. Das war für das Einlesen. Gruß, avrGerd
-
Thread
Aurel AM 433MHz Empfänger - Signal auswerten
testweise einschalten. Bis jetzt habe ich folgendes: [c] #define F_CPU 960000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> // Sendefolge: 11110001 Binär: 0b10001111 volatile uint8_t code = 0x00; volatile uint8_t breakcount = 0; uint8_t ready = 0; uint8
eingestellt. Verdammt^^ Mir passieren immer so kleine Fehler. [c] #define F_CPU 9600000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> [/c] Bin C++ Programmierer für Windows, habe mit dem µC erst angefangen. Erkennt sonst noch jemand einen Fehler? habe es nocheinmal versucht
-
Thread
Daten des ATTiny24 über SPI auslesen
Ich habe einen USB-Stick mitdem ich meinen µC programmiere, welchen ich in AVR-Studio als STK500-Board verwende. dieser USB-Stick schickt die SPI daten vom µC durch den USB-Stick über einen COM-Port und umgekehrt
Ich sehe den USB-Programmer ja als Com-port im Gerätemenager. Und über C++ kann ich daten vom COM-Port einlesen und ausgeben. Allerdings brauche ich dafür solche Daten wie die Baudrate. Wenn ich die Daten hätte, müsste ich meiner Meinung nach
-
Thread
UART ARRAY von PC an PIC
//Port RA5 = Ausgang PORTB=0; PORTC=0; RE0=0; RE1=0; RA5=1; //Port RA5 = Einschalten, Anzeige des Analog wertes auf Display, wert muss
asm("nop"); } TRISD=0; //Port D = Ausgang ->Display Port bereit TRISA5=0; //Port RA5 = Ausgang RA5=1; //Port RA5 = Einschalten, Anzeige des Analogwertes auf Display
-
Thread
Viele Drehimpulsgeber an einem PIC
Ports legen die Eingänge multiplexen und den Status einzeln abfragen. Das braucht dann 22 Ports und du muss die Encoder mit Dioden entkoppeln. Die Abfragezeit für alle machst du dann etwas größer als
Was spricht gegen Multiplexen? Immer 4 gleichzeitig einlesen (8 Pins), und das x5. Wenn die 13 Pins zuviel sind, nimmt man ein 74HC165 zum einlesen und ein 74HC299 zum Multiplexen: Das kostet 4 Pins (MOSI, MISO, 2xSCK). Der Aufwand zum einlesen ist verschwindend
-
Thread
AVR STK500: Motoransteuerung / einfaches Assemblerprogramm
richtigen" Programm realisieren, nur leider weis ich nicht sorecht wo ich anfangen soll - trotz Einlesen in mehrere Tutorials. An und für sich dürfte das Programm ja nur so 10 Zeilen Code haben. Im Wortlaut ungefähr so: Wenn Switch0 betätigt wird, lege HIGH auf PB00 (Pin0 PortB). Wird Switch1 betätigt
Wäre das nicht über eine Konstante denkbar? Eben 1 und 0. Also anstelle von inc eine Konstante einlesen, und mit dem andern Switch (Port D, pin 1) die Konstante durch eine andere (-> 0) ersetzen. So nach dem Motto: [avrasm] [...] ;Code-Ausschnitt! sbis PIN,0x00 LDI Temp, 1 sbis PIN,0x01 LDI
-
Thread
Atmega zu wenig Pins / LED u Taster an Pin / MISO MOSI SCK anderweitig benutzen
auch einfach ein Widerstand zum Schutz dazwischen klemmen? http://www.mikrocontroller.net/articles/AVR_In_Sys... gibt leider kaum Auskunft. Könnt Ihr mir Tipps geben? Danke
Zeig dochmal den Schaltplan, also was Du alles an den AVR angeschlossen hast. Man kann oftmals Pins mehrfach nutzen. Peter
-
Thread
PIC18F4550 minimale Beschaltung mit maximaler Portanzahl möglich?
Compiler... Leider wird mir im MPLAB immer angezeigt (Watch-Funktion) das ich nicht jeden Pin von einem Port als Eingang oder Ausgang zuweisen kann... also ich schreibe zB. TRISA = 0xFF aber der schaltet mir nur PIN RA0-RA5 als Eingang und RA6-RA7 bleibt unverändert... Beim PORTB, PORTD und PORTE funktioniert
Projekt drauf. Die Demo eignet sich dann auch hervorragend als Ausgangspunkt für alles andere. Deine Port-Ansteuerung kann man auch über Porterweiterungen komfortabel lösen (Stichwort I²C).
-
Thread
Servo Mischer für Zeppelin
steht. Deiner Aussage folgend reichen ja schon 2 Pins: nämlich das ursprüngliche Summensignal einlesen, mischen und wieder als Summensignal ausgeben. Macht also (5 Pins weniger als Fernsteuerer)
Mix-Berechnungen (mit viel Programmcode in > einer Hochsprache) ein Mega88/168. Oder man beherrscht PIC oder AVR Assembler, dann genügt ein kleiner µC und simple Routinen und das Problem ist gelöst. Die Antwort klingt ja wie eine Marsmission, aber nicht wie das einfache Einlesen von einigen Servopulsen, verrechnen
-
Thread
PIC12F675 brauche Hilfe
Kleiner Stolperstein, während bei den größeren PICs wie 16F84 die Ports als PORTA, PORTB usw. bezeichnet ist, lautet die Bezeichnung beim 12F675 "GPIO" (general purpose I/O). Also statt PORTA fuer den Port TRISA fuer die Datenrichtung (Eingang/Ausgang) verwendet
Kann ich einzelne ports so ansprechen?: GPIO3=1; oder muss ich das hier anders machen (beim 16F84 sind die Bezeichnungan ja RA, beziehungsweise RB...)
-
Thread
Wettersensor / serielle Daten auswerten?
Bit , 2ms Low = 0 , 4 ms Low = 1 und das ganze 6x Jetzt würde ich diese Daten gerne an einen AVR Mega8 leiten, verarbeiten und auf ein LCD ausgeben. Nur habe ich leider überhaupt keine Ahnung wie ich die Daten einlesen kann. Könnte mir jemand mal schildern wie man mit solchen Daten am besten umgeht
noch gerne wissen würde ist, wie detektiere ich das Signal am besten? In der Hauptschleife den Port immer wieder abfragen? Oder lieber einen Interrupt auslösen lassen? Was sollte dann in der ISR passieren und was nicht?
-
Thread
Probleme beim Analogeingang einlesen Atmega32
Hallo nochmal, ich bräuchte nochmal hilfe bei meinem Projekt. Ich möchte mit einem Atmega32 an einem Spannungsteiler eine Spannung 0-5V messen. Eigentlich sollte das ganze an einem LCD-Diplay angezeigt werden aber mir reicht erstmal irgendeine anzeige. Leider bekomme ich es nicht mal hin, mir den umgewandelten Wert an einer LED Reihe anzeigen zu lassen. [c] #include <avr/io.h> #include <avr/lcd-pollin-jumper.h> //Bitte lib in ordner kopieren! #define F_CPU 16000000UL #include <util/delay.h> //Standardverzögerungs Lib #define F_CPU 16000000UL uint16_t result; void ADC_init(void)
-
Thread
AtMega8 und g++ Optimierung: PIN einlesen wird wegoptimiert
Hallo, ich steuere ein Display mit dem Atmega8 an, der Code ist in C++ geschrieben. Unter anderem gibt es folgende Methode mit der "PROBLEMZEILE". [code] unsigned char readByte() { unsigned char byte; DDRD=0x00; //PortD as input PORTD=0xFF; //PortD with internal Pull-Up PORTB |= (1 << WRB); // Read //Dummy read after setting address PORTB |= (1 << RDB); PORTB &= ~(1 << RDB); PORTB |= (1 << RDB); // really read PORTB |= (1 << RDB); PORTB &= ~(1 << RDB); byte = PIND; //PROBLEMZEILE PORTB |= (1 << RDB); return byte; } [
-
Thread
Zu blöd ein struct zu sortieren
servo; volatile int open; volatile int closed; volatile int position; volatile uint8_t *port; //Adresse des Ports volatile uint8_t portbin; } servos[SERVOANZAHL];[/c] Bei volatile uint8_t *port; möchte ich gerne die Adresse des Ports einlesen. Initialisiert wird das dann mit servos[0].port = &PORTD zum Beispiel. Damit ich später mal mittels *(servos[k].port) &= ~(servos[k].portbin); den Entsprechenden Portbin auf High oder Low schalten kann. Wenn ich jetzt das struct sortieren
-
Thread
Eclipse Programm (Mikroprozessor)
mir die inzelnen Schritte nochmal erklären könntet. Danke im Vorraus. CODE: #include <avr/io.h> #include <util/delay.h> void initPort_AinBout(); void putByteLED_B(unsigned char); unsigned char waitforKey_A(); unsigned char getKeyNum(unsigned char); void putPattern(unsigned char[]
Zu deiner Frage passt besonders dieser Abschnitt im AVR-GCC Tutorial: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports
-
Thread
Zwei defines verbinden
Defines zwischen den Zuständen Input/Tristate und Output/High umschalten, d.h. ich Muss sowohl DDxn und PortXn jeweils von 11 auf 00 umschalten. Bisher habe ich für jede einzelne Operation ein "Reinschrift-Define". #define I0 (PORTD |= (1<<PD4) ) #define I0_out (DDRD |= ( 1 << DDD4)) Kann ich diese
Nachtrag: Im Code generiert durch avr-gcc findet sich dieses Verhalten allerdings nicht. Da wird eine solche Bedingung zu always-true optimiert. Volatile-Bug vom GCC?
-
Thread
Atmega 8 Programmieren für Anfänger (Taster und LED)
Danke für die schnellen Antworten ich denke ich muss mich noch ein wenig in die Thematik einlesen. Habe ein Beispiel für ATTINY 2313 gefunden (elsniwiki): [C] #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> int main (void) { // ******************************
--- // 1MHz ist Default-Takt (Fuse-Bits nicht manipuliert #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> int main (void) { // Pin 1 von Port B (PB1) als Ausgang schalten DDRB = (1 << PB1); // Endlosschleife for (;;) {
-
Thread
Display Programmierung mit GCC 16x4 Display
(mangels Zeit). Gell, Hardware-Initialisierungen sind in diesem Beispiel keine drin, oder? Die Ports scheinen aber initialisiert zu sein, zumal es zumindest etwas tut. Wie schnell taktest Du den Prozi denn? Ich kenne AVR zwar gar nicht, aber ich nehme doch sehr stark an, dass auch bei interner
sich im Brennprogramm (zumindest war das in AVR-Studio 4 noch so)
-
Thread
ATMEGA 16 Problem
JTAG erklärt nur PortC, nicht PortA.
Deutlicher Hinweis darauf, dass dein JTAG immer noch aktiv ist. Ponyprog starten Fusebits einlesen lassen JTAGEN auf den anderen Wert stellen Fusebits schreiben Dann sollte der Spuk ein Ende haben.
-
Thread
Anfängerproblem: Im Zustand "gefangen"
jemand dabei helfen, die Tomaten von den Augen zu bekommen? :-) LG, Daniel [code] #include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> int i = 0; // Timer Overflow counter int state = 0; // Status int main(void) { DDRB = 0xFF; // Port B as output
Du auch PORTB wieder einlesen: [c]> ISR(TIMER0_OVF_vect) { if(++i == 14) { if(PORTB == 0x7F) { PORTB = 0xFE; } else { PORTB = ~(~PORTB << 1); } i = 0; } }[/c]
-
Thread
ATtiny13 Problem mit Tonerzeugung
Aufrufe des Unterprogramms /zeit/ oder schmiert der dann ab? http://www.mikrocontroller.net/articles/AVR-Tutorial:_Stack
weiteren Versuche von OCR0B auf OCR0A verändert habe, arbeitet der Timer im Compare Match A Mode laut AVR Stdio korrekt. Danach erfolgt aber lediglich eine Zustandsänderung (Toggle) am PB0 im Register 16 "INPUT Port B " und nicht am PB0 im PORTB-Register. Hardwaremäßig tut sich am Pin 5 auch nichts.
-
Thread
Entwicklungen und Forschung um den Sparmatic Comet / Zero v2 Heizungsthermostat
Wie du meinst, nur nicht weinen wenn's mit dem AVR vorbei ist... :)
Temoc schrieb im Beitrag #2848799: > Dann würden sie wohl kaum den AVR rauswerfen.. Wie jetzt?
-
Thread
Verbindung über RS232
[c] #include <windows.h> #include <memory.h> #include "ComTools.h" #define MAX_COM_PORTS 8 #ifdef UNICODE #define Z(a) L##a #else #define Z(a) a #endif static HANDLE hComFile[MAX_COM_PORTS]; static BOOL bIsOpen [MAX_COM_PORTS]; //*********************
einem anderen Programm benutzt // pMode[0] für COM1 // pMode[1] für COM2 // ... // iMaxPorts ist die Anzahl der Ports die gescannt werden. void ComDetectPorts(int &iCount,int *pMode,int iMaxPorts) { int i; TCHAR cName[]=Z("\\\\.\\COM1"); HANDLE hCom; for(i=0;i<iMaxPorts;
-
Thread
AVR Potentiometer schwankt total
Kenn mich mit zwar mit AVR nicht gut aus, aber nochmalerweise muss du dem AD Port ein bißchen Zeit geben um sich zu stabilisieren. Wenn du zu schnell bist kommt nur Müll bei raus. Was auch hilfreich ist mehrfach hintereinander
mainloop messung1: ldi r16,0b01000000 ;PortC.0 einlesen out ADMUX,r16 ldi r16,0b11100101 ;Wandlung starten out ADCSRA,r16 sbi ADCSR,ADSC wait1: sbis ADCSR,ADIF ;Warten bis Wandlung beendet ist rjmp wait1 in r17,
-
Thread
Grafikfähiger LCD Controller für 320x240 LCD mit D-RAM
ATmega644P zu sein. Nun gut, wollt das Projekt neu kompilieren und das ging leider nicht. UMGEBUNG: AVR-Studio 4.13 mit WINAVR-20100110, AVR-GCC. Irgendwas haut mit den Inline-Assembler-Files unter AVR-Studio4 nicht hin! < Hier mal ein paar Fehlermeldungen > Error: constant value required Error
"SIG_USART_DATA" --> "USART0_UDRE_vect" eingertagen hier: (uart.c) [c] #elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega88__) \ ||defined(__AVR_ATmega168__) || defined(__AVR_ATmega644__) #define ATMEGA_USART0 #define RXCIE RXCIE0 #define TXCIE TXCIE0 #define RXEN
-
Thread
Funktioniert diese Schaltung so?
nicht wie beim AVR umschalten, sondern man setzt den Port auf "1", wenn man ihn als Eingang benutzen will. Und bei "0" ist das Geraffel dahinter sowieso ohne Funktion. Mini Float schrieb im Beitrag #2401073: >
Elektronik und > Open-Collector-Ausgang? Muss er auch sein. Der muss in der Lage sein, den Pullup des Ports auf "0" zu ziehen. Sonst wird das nichts mit 'nem 8051. Jedenfalls wenn man den Zustand damit einlesen will. Aber wozu soll der Port sonst gut sein? mfg.
-
Thread
Programmierbarer Timer
pinb,2 ; PB2 in r16 einlesen ldi r16,0 cpi r16,0 ; r16-0 breq Programmieren ; Sprung zu Unterprogramm, wenn Ergebnis (PortB2)=0 ;25 ldi r17,0x00000011
werden. ------------- nicht nachvollziehbar --- sbic pinb,2 ; PB2 in r16 einlesen ldi r16,0 cpi r16,0 ; r16-0 breq Programmieren ; Sprung zu Unterprogramm, wenn Ergebnis (PortB2)=0 ;25 ----------------------------------