-
Thread
Port einlesen
Ich verstehe dein Problem nicht. Wenn du alle 8 Bit einlesen willst, tust du doch genau das mit: in r16,PinB Danach stehen in den 8 Bit von r16 die 8 Bit von PinB drin. Du mußt nicht 8 Mal den Port einlesen und jedes Mal nur ein Bit davon speichern
Ja aber ich will ja nicht den gesamten PortB einlesen sondern nur den einen Pin MISO an dem ich Daten über SPI bekomme. Da bekomm ich bit für bit ein Byte welche ich einlesen möchte. *oderichaufdemschlauchstehe*
-
Thread
Port einlesen und IF abfrage
Atmega32, AVR studio. Würde gerne PortA Port 4-7 als Eingang / 0-3 als Ausgang verwenden. Mein kleines Testprogramm läuft noch nicht, habe noch Probleme mit der Synthax. Der Befehle "PORTA = 1<<PA0;" bzw "PORTA = 0<<PA0;" alleine läuft. Nur das "IF" macht wohl Probleme. Möchte wenn PA7 "Low" ist, soll PA0 auch low sein bzw umgekehrt. #include <avr/io.h> int main (void) { DDRA = 0x0F; // 0-3 Ausgang & 4-7 Eingang PORTA = 0xF0; // 4-7 high (soll dann runtergezogen werden) while(1) { if (PORTA & (1<<PA7)) // geht nicht // if (PA7 == 1) geht auch nicht {PORTA
-
Thread
Warum funktioniert mein AVR Assembler Code nicht?
Port einlesen, was der TO sowieso möchte, und dann evtl. die Pin einzeln behandeln. Lothar M. schrieb im Beitrag #5892479: > in r16,PINC ; alle Pins vom PC einlesen Neieiein! Ändern.
Hi >Also,einen Port einlesen >erfolgt nicht mit einem Ladebefehl LDI oder LDS sondern mit IN >(Register),PINx. Selbstverständlich kann man LDS zum Einlesen eines Port verwenden. Allerdings nicht mit der IO-Adresse
-
Thread
bidirektionale Datenübertragung zwischen 2 Atmega 8
erspart das ein wenig zeit. Die Beispiele findest du im Tutorial, wahlweise Assembler oder C. [[AVR-Tutorial: UART]] [[AVR-GCC-Tutorial]] Ist ja praktisch nix zu machen. [[Timer]] mit 10ms Aufsetzen Wenn der Timer eine [[Interrupt]] auslöst, alle Ports einlesen Ports in drei Bytes verpackt
4,3 kann noch reichen, ist aber schon grenzwertig. Das Problem ist hier, dass die am LPT-Port angeschlossenen Programmer in der regel volle 5V Spannung liefern. Wenn der zu programmierende AVR weniger Bestriebsspannung hat, dann kann da gelegentlich der MISO.Pin durchbrennen - und dann ist
-
Thread
Eingang einlesen
Hallo, der macht mich noch verrückt: ich versuche bei einem MEGA32 die Eingänge an Port C zu lesen. Aufgrund der aktivierten Pullups kann ich mit einem Taster den Eingang auf Masse ziehen. Nachmessen mit dem Multimeter ergibt 5 Volt am Eingang, wenn ich den Taster drücke 0 Volt. Allerdings interpretiert der AVR die ganze Zeit, das die Taste gedrückt ist, auch wenn mir das Multimeter 5 Volt am Eingang zeigt. Was ist hier los? --- *schnipp* DDRC = 0x00; // Register C: Input PORTC = 0xff; // Pullups aktivieren while(1) { // Tastenabfrage // Rückwärts if (bit_is_clear
-
Thread
Pin einlesen
Hi Bj, guck dir mal das AVR-GCC-Tutorial an, da ist es beschrieben wie das es richtig geht: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_Ports Gruss B. Köppel
und wieder port und pin vertauscht
-
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
AVR - Port einlesen/ausgeben
Hi, ich bin gerade dabei, mich ein bisschen in die AVR Architektur einzuarbeiten und möchte dazu mal mit einem einfachen Assembler Programm starten. Folgendes hätte ich mir überlegt: Am Port PA hängen 4 LEDs (PA4 - PA7) und 4 Taster (PA0 - PA3). Wenn
internen Pullup Widerstände ein 1-Signal. Also High an dem jeweiligen Pin. Wenn Du also nach dem Einlesen des Ports A ( in temp,PINA ) alle eingelesenen Bits invertierst ( com temp ) erhälst Du für jeden nicht betätigten Taster ein 0-Signal. Also Low. Jetzt passt auch die Maskierung ( andi temp, 1<<0
-
Thread
Brauche Unterstützung beim OV7670 (bzw. SCCB)
man schneller zum Ziel, weil es uns > etwas „zusammenhält“. Mit Blick auf die arg beschränkten AVR-Ressourcen, würde ich ein Polling zum Einlesen einer beliebigen Zeile vorschlagen. Und da das RAM des ATmega bereits nach dem Einlesen von nur einer Zeile randvoll sein dürfte, würde ich nach dem
erwartungsgemäß antwortet. Die pinMode()/digitalWrite()/digitalRead() der ArduinoIDE dann duch die Port/Pin-Zugriffe des AVR zu replacen ist ja keine wirkliche Arbeit. Gruß aus Berlin Michael
-
Thread
Übertragung von High- und Low-Signalen zwischen zwei AVR
Frage beantwortet haben. (-> siehe Schaltung) Es geht mir nur um's Prinzip! Also: Wenn ich dem AVR1 sage [c]portB = 0b00001111; // PortB, Pin0..3 auf "1"setzen[/c] und beim AVR2 abfrage[c]if(portB = 0b00001111){/*mach was*/} // Signale an PortB, Pin0..3 abfragen[/c] ...würde dies so funktionieren
Chris K. schrieb im Beitrag #3861511: > und beim AVR2 abfrage[c]if(portB = 0b00001111){/*mach was*/} // Signale > an PortB, Pin0..3 abfragen[/c] > ...würde dies so funktionieren (mit dieser Art von Schaltung) oder > müsste ich etwas verändern?
-
Thread
Port-Expander mit Logikbausteinen
werden sie nur noch vom Prozessor per UART/I2C/SPI oder über einen parallelen Port angesteuert.
Manni T. schrieb im Beitrag #7464301: > Port-Expander mit Logikbausteinen wie PLDs Warum? I²C Port Expander, SPI Port Expander, Serielle Shift Register mit Parallel out am SPI. Es gibt zahllose Möglichkeiten bei denen die MCU kaum mehr als
-
Thread
einfaches DIGITAL- Oszilloskop (800 Datenpunkte) Assembler
wenn ich den OP nun mit +/- 10V (oder +/- 5V) versorge, kann ich doch nicht garantieren, das der AIn-Port am AVR zuviel bzw. negative Spannung abbekommt oder? währe es dann nicht besser die Dioden direkt vor dem AVR zu platzieren? oder ich versorge den OP nur mit 6V und Gnd, somit kommt am AVR nur
ich den OP nun mit +/- 10V (oder +/- 5V) versorge, kann ich doch >nicht garantieren, das der AIn-Port am AVR zuviel bzw. negative >Spannung abbekommt oder? Da hast Du natürlich Recht. Ein kleiner Trick wird angewendet damit das nicht passiert, man nutzt die internen Schutzdioden des µC. Ein Vorwiderstand
-
Thread
AVR-Tutorial: ADC
; Alle Port's auf Low ldi Temp1,0b00000000 out PortB,Temp1 ; Port B alles auf Low out PortC,Temp1 ; Port C alles auf Low out PortD,Temp1 ; Port D alles auf Low ;Alle Interrups an sei ; neuen ADC-Wert
; Alle Port's auf Low ldi Temp1,0b00000000 out PortB,Temp1 ; Port B alles auf Low out PortC,Temp1 ; Port C alles auf Low out PortD,Temp1 ; Port D alles auf Low ; ADC initialisieren: ADC0, Vcc als Referenz
-
Thread
AVR C: Kann man den kompletten Port gleichzeitig einlesen?
Kurze Frage... kann ich in C einen kompletten Port gleichzeitig einlesen? Ich meine würde sich bei einer 1Byte Variable ja durchaus lohnen wenn man komplett einlesen kann anstatt alle Pins einzeln durchzuschieben. Bin gerade darüber und frage mich
>>> kann ich in C einen kompletten Port gleichzeitig einlesen? Ja. [c] uint8_t port; port = PORTA; [/c] Das resultiert dann im Assemblerbefehl IN. Das Gegenteil wäre OUT: [c] PORTA = 0x55; [/c] Aber vermutlich willst du gar nicht
-
Thread
Dezentral Eingänge einlesen und entfernt wieder ausgeben!?
dient als "Master", der kontinuierlich Daten an den AVR im Keller (Slave) den Status sendet. Ich würde beispielsweise für den AVR im Sicherungskasten den Port B nehmen. Der Portstatus soll dann via Bus an den AVR im Keller gesendet werden. Dieser AVR
Das zweite Kapitel des Tutorials heisst •I/O-Grundlagen: Wie kann ich Taster und LEDs an einen AVR anschließen und benutzen? Da haettest Du dann alle Infos zur Eingabe, also Ports und Portpins einlesen. Etwas weiter hinten findest Du dann das Kapitel •Der UART: Wie kann ich Daten zwischen
-
Thread
AVR32: Wie Ausgänge/Eingänge schalten/einlesen
= 20000000; portA->per |= (1<<19); portA->oer |= (1<<19); portA->idr |= (1<<19); portA->pudr |= (1<<19); portA->sodr |= (1<<19); AVR32_PM.pll0 = (1<<AVR32_PM_PLL0_PLLEN_OFFSET) | (0<<AVR32
<AVR32_PM_MCCTRL_PLLSEL_OFFSET); AVR32_PM.cksel = 0; portA->pdr |= (1<<18); portA->pudr |= (1<<18); portA->asr |= (1<<18); //RESET USART1 usart->idr = 0xffffffff; usart->cr
-
Thread
String einlesen und bearbeiten
Im anderen Tab steht folgendes: uart.o: In function `__vector_13': K:\AVR\AVR-Programme\WechselrichterStoermeldeprogramm\default/../uart.c:260: multiple definition of `__vector_13' WvS-Sample.o:K:\AVR\AVR-Programme\WechselrichterStoermeldeprogramm\default/../WvS-Sample.c
In deiner Fehlermeldung steht [code] uart.o: In function `__vector_13': K:\AVR\AVR-Programme\WechselrichterStoermeldeprogramm\default/../uart.c:260: multiple definition of `__vector_13' WvS-Sample.o:K:\AVR\AVR-Programme\WechselrichterStoermeldeprogramm\default/../WvS-Sample.c
-
Thread
Problem bei Einlesen der Analogwerte
Schönen Guten Abend, mein Problem ist folgendes. Ich habe eine Schaltung mit zwei Analogen Eingängen wo jeweils ein CNY70 dranhängt. An den beiden Ausgängen jeweils eine LED. Das Programm läuft soweit, mit einem Eingang. Nehme ich allerdings den zweiten Eingang dazu, reagieren beide Ausgänge identisch, obwohl ich nur einen Eingang manipuliere. Wäre nett wenn ihr mir eine Tipp bzw. weiterhelfen könntet. Seh den Wald vor lauter Bäumen nicht mehr! Programmiert wird ein ATmega32 über das Pollin Evaluationsboard. [c] #include <avr/io.h> void ADC_Init(void); uint16_t ADC_Read(uint8_t channel
-
Thread
Port "Multiplexer"
Den Schiebetakt muß ein Portbit des AVR zu Fuß erzeugen, mit sbi und cbi. Dann braucht man einen Load-Impuls und einen Dateneingang, also drei Portbits am AVR insgesamt um 8 oder 16 oder mehr Schalter seriell abzufragen.
Ah super. Das kapier ich. Da brauch ich also 8 bits + 1 bit für jeden erweiterten Port. Evtl kann ich mit einem Baustein mit 2 bits auch 4 ports ansprechen... Muss ich mir mal überlegen. Das scheint eine gute idee zu sein.
-
Thread
PORTPIN einlesen
Ach, noch was: Das steht alles im [[AVR-GCC-Tutorial]]...
so wie ich das Daenblatt lese hast du da vollkommen recht, aber diese Ports lassen sich komischerweise auf 5V bringen, auch die Änderungen an diesen Ports werden vollständig erkannt...
-
Thread
Zeitmessung funktioniert nur so halb :-/
ändert Timerwert (natürlich > mit überlaufzähler) Speichern+Pollresult > (also z.B. einfach den Port kontinuierlich mit "in temp, PORT" einlesen, > vergleichen ob sich was geändert hat. (cp last, temp). > Wenn ja, Timerwert einlesen+speichern+den eingeselen PORT wert. > - Auf tastendruck endet die
OK, hier mein Vorschlag. theoretisch bräuchte man 8 Capture-Compare-Eingänge. Da wir die im AVR nciht haben, muss es eben per Polling gemacht werden. Kleiner Pseudocode. Warte aus Startsignal für Messung Schleifenanfang: Port einlesen Vergleich mit vorherigem Wert Wenn verschieden,
-
Thread
Port mit 200 kHz einlesen
Hallo zusammen! Ich möchte die Zustände zweier Ports (Port B, Port C) mit einer Frequenz von 200 kHz einlesen. Dazu verwende ich den Timer1 mit entsprechender Vorladung im CTC-Modus: Vergleichswert 80, Prescaler 1, f=16MHz. Laut Simulator benötigt die
: > Aber wozu überhaupt Interups? > Was soll der MC noch in der Loop erledigen? 20 Werte pro Port mit einer (einstellbaren) Frequenz von bis zu 200 kHz einlesen. Da die Frequenz einstellbar ist, verwende ich den Timer. Bis 100 kHz geht es auch. M.O. schrieb im Beitrag #3984373: > Das wird an
-
Thread
Logic Analyzer bauen
jetzt über die 2te Leitung einen Takt zum PLD so das dieser jedesmal die Adresse höher stellt, der AVR steuert die Befehle zum lesen so das die Daten an 2 Ports anliegen die er dan einlesen kann. Und ja nach Protokoll was dann jeder selbst schreiben kann gibt der AVR die Daten an den PC aus.
geschrieben und passt.. aber das muss ich mir noch durch den kopf gehn lassen und mich genauer einlesen in das ganze... in der 1. revision wäre es glaubich sinnvoll einfach einen jtag header für den cpld noch vorzusehen und mit brücken eine verbindung auf ein avr port zu legen... jtag ist beim
-
Thread
Logikbausteine mit AVR realiesieren
Dirk wrote: > > Wie kann man einzelne Bits beim Atmel abfragen Du meinst von einem Port? Mittels cbis und sbis, aber das hilft dir nicht viel. AVR sind Risc Prozessoren, für fast alles muss der entsprechende Wert in einem Register vorliegen.
OUT ZielPort, R? Johann
-
Thread
Beispielprogramm für RFM12 433MHz Funk-Module
Ja, so in etwa. Du musst dann halt anstelle der uart_getchar() Funktion den Port einlesen und anstelle der uart_putc() den Port beschreiben. Um so wenig wie möglich zu senden wäre es z.B. gut wenn man nur nach Änderungen an den Eingängen einen neuen Wert sendet, also so in etwa
LED an PC0 an bzw aus } } } [/c] Woran liegt das oder muss ich beim einlesen der ports etwas ändern?
-
Thread
Dual Port Ram durch Single Port Ram ersetzen
erforderlich) und den Rest für den Zeichengenerator nimmst. Die RAM-Blöcke können wahlweise auch als Dual-Port RAM ausgeführt sein, das kannst Du im VHDL-Code konfigurieren. Vorteil des ganzen: es braucht 0 Rechenleistung. Dein AVR schreibt einfach seine Zeichen rein, und das FPGA macht den Rest. Alternative
sich jetzt ja auch herausgestellt hat dass es auch anders geht. Wie >beschalte ich zwei single Port SRAMs so, sodass ich auf ein Dual Port >SRAM verzichten könnte. Für x-fache Ports, je Port RD-WR-Zwischenregister, die nach aussen asynchr die CPUs versorgen, nach innen gemuxt auf ein SRAM gehen
-
Thread
Drehgeber auslesen
Variante ohne Tabelle, die noch schneller und kleiner ist. Das Codebeispiel ist diesmal für den AVR geschrieben, die Änderungen für den 8051 sind aber nur minimal (Definition der Portpins, Timerinitialisierung). Funktionsweise: Das Einlesen der beiden Signale erfolgt mit: if( PHASE_A )
flattert. (2) Falls mit internen Pullups gearbeitet wird, muss nach der Portinitialisierung und dem Einlesen der Port-Pegel in der Funktion encode_init() eine kleine Pause eingelegt werden, damit ggf. offene Leitungen auf High gezogen werden (Leitungskapazitäten) (3) Der Pollin Encoder dreht gegenüber
-
Thread
AVR Sprungtabelle
deine Tasten low aktiv sind (schalten nach GND), dann kann man das einfach ändern, indem man das Einlesen der Pins so macht [avrasm] in tmp, PINein ; Pins einlesen com tmp ; alle Bits invertieren [/avrasm]
deine Tasten low aktiv sind (schalten nach GND), dann kann man das > einfach ändern, indem man das Einlesen der Pins so macht > in tmp, PINein ; Pins einlesen > com tmp ; alle Bits invertieren Das werde ich ausprobieren Danke
-
Thread
Taster Entprellung am Attiny 841 und Auswertung
HJabe den kompletten Code. Er funktioniert ohne Fehlermeldung. Die Funktion ist beiden Ports möglich, hat aber ein paar komische Effekte. [c] #define F_CPU 8E6 // Angabe Frequenz #include <avr/io.h> // Einbindung Datein #include <avr/interrupt.h> #include <stdint.h> volatile
> minimale Transferleistung erfordert. wenn Paul sich einfach mal klarmacht das er Tasten an 2 Ports angeschlossen abfragt #define KEY_portA_1 0 // PA 0 - Taster 1 #define KEY_portA_3 7 // PA 3 - Taster 3 #define KEY_portA_4 5 // PA 5 - Taster 4 #define KEY_portB
-
Thread
Bascom 7 Pins eines Ports setzen
Gar nicht. Aber du kannst vorher den Port einlesen, den Zustand dieses 1 Bits feststellen, den im auszugebenden Byte einsetzen und dann dieses so gepimpte Byte ausgeben. Oder aber du setzt die 7 Bits einzeln.
@ Karl Heinz Buchegger: Du hast Recht; es war ein dummer Denkfehler meinerseits. Das Einlesen des PORT-Registers liefert natürlich das richtige Ergebnis. Ich hatte das mit dem Einlesen des PIN-Registers verwechselt ... :-(
-
Thread
Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino
Portzugriff durchführen würdest (was voraussetzt, daß Du Data_D0_pin bis Data_D7_pin auf einen der Ports des AVR legst, und zwar in der richtigen Reihenfolge), dann würde die Funktion ReadDataValue() in sich zusammenfallen zu einem > dataVaue = PINB; (wenn der verwendete Port zufälligerweise Port
anfangend, hochzählen. Wenn man genugt Ports zur Verfügung hat, kann man die Daten dann an einem anderen Port einlesen, im SRAM zwischenspeichern und blockweise auf der UART ausgeben. Wenn man nur wenige Portpins zur Verfügung hat, kann man den
-
Thread
Infineon XC888: Daten einlesen mit PORT
Hallo Carsten St., wie liesst du die Daten mit dem Port ein? Kannst du mir einen Codeauschnitt zeigen? Auf dem AVR Mikrocontroller läuft der DS1820 ohne Probleme. Diese Funktion verwende ich auf dem AVR Mikrocontroller: unsigned char w1_reset(void
Mit Px_DIR kann man ja die Richtung festlegen. Wenn ich einlesen möchte, dann muss ich Px_DIR = 1 setzen. Mit Px_0 kann ich dann die Daten einlesen.
-
Thread
Port Abfragen
neu hier und habe auch schon ein Paar dinge aus Tutorial probiert. Ich verwende eine AT90S4433, AVR-Studio und Yaap Jetzt meine Frage: "ist port B = 00110011 dann ausgabe von 01010101 nach port D" "ist port B = 00111011 dann ausgabe von 00001111 nach port D" usw. PS: Ich bin Gehörlos
wenns nur ein paar Abfragen sind, gehts am einfachsten so: "ist port B = 00110011 dann ausgabe von 01010101 nach port D" in temp, PINB //einlesen von PIN B cpi temp, 0b00110011 //1.Vergleich brne chk_2 //wenn nicht gleich, anderer Vergleich
-
Thread
Daten für Drucker abfangen
Das Schieberegister brauchst Du nicht unbedingt. Du kannst doch die Daten parallel über einen Port in den MC einlesen und seriell wieder herausschieben. MfG paul
@ Rupplyn (Gast) >Und, kannste doch machen. Der FT2232 hat 2 Ports. Einen kannste als >Datenport verwenden, den anderen für deine Steuersignale... Im Prinzip ja, ABER - mit AVR "vor Ort" wird das Ganze WESENLTICH schneller - man braucht keinerlei spezielle
-
Thread
Sprachausgabe mit AVR
Hi, hast du die Demo von Bascom oder die Vollversion? Mit der Demoversion kannst du AVR-Dos nicht benutzen, da der Code deutlich über 4kB groß wird. Eigentlich ist AVR-Dos schon in BASCOM integriert. Als beispiel solltest du dir die Datei /BASCOM-AVR/SAMPLES/AVRDOS/Test_DOS_drive.bas
ich bei 20 MHz und 22050 KHz sampling [c] #include <stdio.h> #include <string.h> #include <avr/io.h> #include <avr/eeprom.h> #include "mmc.h" #include "fat.h" #include "usart.h" #include <util/delay.h> #include <avr/interrupt.h> volatile int a; int b; int dl2; unsigned char
-
Thread
Einzelne Port-Pins abfragen
Portpins abfragen. >(z.B. mit IN r16, PINB0). Das geht nicht. 'IN' erwartet die Adresse eines IO-Ports. PINB0 ist aber nur die Pin-Nummer. In diesem Fall 0. Ausser den genannten Möglichkeiten 'sbis'/sbic' kann man auch den Port einlesen und das Bit abfragen: [avrasm] in r16,PINB andi r16, 1
Ich habe mich gerade gefragt, ob das auch funktioniert, wenn einige Pins des Ports als Ausgang konfiguriert sind. kann man dann trotzdem mit in r16,PINB die auf eingang geschalteten Pins einlesen? Was passiert mit den Bits der als Ausgang konfigurierten Pins? Gruß,
-
Thread
AVR: High Pin einlesen
Ader des Kabelbaums) zwischen PA0 und PB0. PA0 möchte ich nun auf High schalten und an PB0 wieder einlesen. So kann ich nach und nach die Ports durchschalten damit ich sichergehen kann dass die einzelnen Adern auch in der richtigen reihenfolge auf den Steckern sitzt... Nur irgendwie schaffe ich es nicht
Besser ist es sowieso, nur auf die entsprechenden einzelnen Pins zu reagieren, nicht auf den ganzen Port. Also entweder maskieren oder direkt sbis/sbic verwenden. Irgendwann bastelst du was an den PortD dran, dann funktionierts so wie du es machst nicht mehr. breq start rcall taster_lesen
-
Thread
Bits effektiv umsortieren in C
Ich habe ein paar Eingänge an verschiedenen Ports des AVRs die aber leider "Layoutoptimiert" angeordnet wurden. Ich muss also die Ports einlesen und die Bits umsortieren, sodass sie logisch verwertbar sind. Wie Kann man das in C am effektivsten erledigen
durchgeführt werden. Und bevor hier wieder jemand mit "Anforderungen" etc kommt: So schnell wie mit einem AVR und 20MHz Takt möglich ist in meinem Fall eine ausreichende "Anforderung". Das mit der tabelle wird aber leider etwas schwierig da ich 3 Ports einlese und den specicher nicht erübrigen kann. Leider
-
Thread
SHT11 an ATmega2560 Es funktioniert nicht
data_hi(); delay(); clk_hi(); delay(); // steigende Flanke der Takt-Leitung sht_port &=~(1<<data); // DATA-Pin auf Eingang umschalten cFehler = PINB; // DATA einlesen und in fehler sichern clk_lo() ; // fallende Flanke der Takt-Leitung sht_port
lesen char sht_lesen(char cAck) { char i; char cWert = 0; data_hi(); delay(); sht_port &=~(1<<data); // DATA-Pin auf Eingang umschalten for(i=0x80;i>0;i/=2) // Mit einer Schleife das 8-Bit Datenwort // bitweise einlesen { clk_hi(); delay(); if (PINB) cWert
-
Thread
Probleme beim Einlesen eines Ports
andre menzel schrieb im Beitrag #3097409: > Aber das Hauptproblem: ich kann keinen der Ports einlesen. > Was mache ich denn da falsch.... > in r18,PORTD ;PortD einlesen Ports werden mit PINx eingelesen! mfg.
//www.mikrocontroller.net/search?query=avr+port+einlesen
-
Thread
Probleme beim Einlesen vom Dip-Schalter
Hallo zusammen, Ich möchte den Wert eines Dipschalters einlesen. Dieser hat 8 schalter und belegt so genau den Port B des Atmega8. im Mainprogramm, vor der Programmschleife initialisiere ich nun die Ports und lese den wert von Port B ein. Dieser wird in eine uint8
eine Schaltung existiert praktisch nicht. Der AVR steckt im STK 500 und ich verwende die LEDs des boards. dann greife ich mir einem Wannenstecker den Port B auf dem STK500 ab und ziehe die Portpins per Dipschalter auf GND.
-
Thread
arduino: port byteweise lesen
bin ich nur zu doof zum Suchen? die zweite Option trifft zu. Tipp für die nächste Suche: Alle AVR-GCC Operationen funktionieren exakt 1:1 ohne irgendeine Änderung auch im Arduino IDE. Versuch es zum Beispiel mit google: avr gcc read port Schon der erste Treffer passt. Ansonsten bin ich
... ah ja, ... vielen Dank :-) avr gcc read port war der Schlüssel zum Erfolg: example : // to read data from port A. DDRA = 0x00; //Set port a as input x = PINA; //Read contents of port a @Michael
-
Thread
ADC_Sensorwert_einlese
Ich habe folgendes Problem, Mein Ziel ist es im Zuge eines Maturaprojektes ein Programm in Assembler für die Steuerung eines Roboters zu schreiben. Der verwendete µController ist ein ATmega16 und die Programmierebene AVR-Studio 4. In Assembler habe ich schon hineingeschnuppert und mir ein Grundwissen dieser Sprache angeeignet. Mein Ziel ist es jetzt ein Programm auf die Beine zu stellen, welches 5 Sensorwerte (0V - 2,54V) mit dem ADC über 5 Kanäle einlest und mit einem "Kontrastwert" vergleicht. Der Kontrastwert soll quasi eine Schwelle (zB. 1V) sein, bei deren Überschreitung der jeweilige Sensor
-
Thread
AVR Assembler Tut: Was mache ich falsch?
in r16, PIND ; an Port D anliegende Werte (Taster) nach r16 einlesen out PORTB, r16 ; Inhalt von r16 an Port B ausgeben rjmp loop [/avrasm]
in r16, PIND ; an Port D anliegende Werte (Taster) nach r16 einlesen out PORTB, r16 ; Inhalt von r16 an Port B ausgeben rjmp loop [/avrasm]
-
Thread
Kann PINs nicht einlesen :(
Hallo! Ich bin am Verzweifeln. Am Pin D3 messe ich normal 0V, mit gedrücktem Button 5V. Alles nett soweit, ist n PullDown dran, soll ja so sein. Leider kriegt der Atmega32-16AU das garnicht mit!!! Folgender Code bringt die LED dazu durchgehend zu leuchten, egal wie sehr ich auf dem Button rumdrücke. [c]#include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define LED_PIN PD6 #define LED_PORT PORTD #define BUTTON_PIN PD3 #define BUTTON_PORT PORTD int main (void) { // Jetzt die Ports richtig beschalten: DDRA = 0b11111111; // PA7 - PA0 als Ausgang (1) PORTA
-
Thread
Transistortester AVR
problems. The L1 can make problems, if it produce a voltage difference between VCC and AVCC input of the AVR. The port C is driven from AVCC, port B from VCC. But these problems can only occur by measuring. What kind of developement environment did you use? I use the GNU tool chain of a linux operating
Kriterium sein. Das mir der Arduino ein Ei legt ist natürlich auch noch möglich. Ich kompiliere mit dem AVR-Studio, daher ist Programmer Typ und Port abgeschaltet. Grüße Hubert
-
Thread
Programm bleibt in ISR hängen
(TOIE2), Bit7=0 (OCIE2) sei(); //Freigabe aller Interrupts } ////////////Sollwert einlesen///////////// void Sollwert_einlesen (void) { sollwert_adc = 0; ADMUX = 0x40; DDRB = 0x02; //Port B als Ausgaenge -> B1 abgreifen (OC1A) DDRC = 0x00; //Port
///////// /* void Istwert_einlesen (void) { ADMUX = 0x41; DDRB = 0xFF; /////Dient der Kontrolle nicht löschen!//Port B als Ausgaenge -> B1 abgreifen (OC1A) (nicht notwendig) DDRC = 0x00;
-
Thread
1-Wire-Bus-Projekt: DS1820 / DS18S20 / DS2450 / DS2408 / unter C und 8051
DS1820 für meinen Atmega8 umzuschreiben. Entspricht die Zeile zw = DQ; // DQ einlesen und speichern aus der Funktion unsigned char ow_rd_bit(void) in ow.h dieser Zeile: zw = PC0; ??? (der Tempsensor hängt an Port C0) Danke für eure Hilfe. Ich frage nach, da ich nicht schon
nicht wie ich die ow.h ändern muss um einen PIN für die Datenleitung auszuwählen. Ich verwende das AVR Studio. unsigned char bit DQ @ 0xb4; // Port-Pin P3.4 = b4h Wie muss ich diese Zeile abändern, um z.B den PIN PC5 als Datenpin zu verwenden
-
Thread
Video DEcoder mit AVR
muss dein Haupt-AVR 1,5 MBit pro Sekunde einlesen, in 8er Gruppen sammeln und dann z.B. in das RS232-Senderegister schieben. Du hast also so ca. 10 Assembler-Befehle pro Bit bei 16 MHz zur Verfügung. Das sollte genügen
reichlich Zeit. Die Frage ist es ob du in 1 µs dein Pixel in einen Digitalwert gewandelt und ggf in den AVR bekommst. Bei einem einzelnen Bit kein Problem. Bei externer Wandlung und einem hohen Takt kannst du bestimmt auch Bytes über ein Port einlesen und für die Weiterleitung vorbereiten. Willst
-
Thread
Hilfe Bei Assembler Program
Stefan P. schrieb: > Die Segmente werden nacheinander von PortA > aktiviert. Das Ergebnis soll mir an PortB angezeigt werden. Du tappst in diese Falle: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Stolperfalle_bei_Matrixtastaturen_etc
Hallo Stefan, in der Simulation läuft dein Programm nur, wenn man den Zustand von Port C genau zwischen der Ausgabe auf Port A und dem Einlesen von Port C ändert. Macht man diese Änderung zu spät, kommt es zu Deinem Effekt. Nehme an, das der Transistor nicht schnell genug sperrt. Füge