-
Thread
Atmega PortA komische Pegel
>Und trotzdem liefert er mir an allen Pins von PortC 4V. > DDRA = 0xff; > PORTA = 0x00; Was denn nun PortA oder PortC? Wenn du PortA auf Ausgang setzt floatet PortC. Entscheide dich mal;)
Ist es möglich das sich PortA und PortC gegenseitig stören? Ich habe versucht mal beide auf 0xff mal beide 0x00 und mal den einen 0x00 und den anderen 0xff zu setzen und wenn ich sofort nach einschalten gemessen habe kam mist raus hab ich
-
Thread
Fehler in Schaltung
delay eingefügt, eventuel klappt es ja besser wenn die anderen Ports ausgeschaltet sind mein code geht jetzt jeden Port einmal seperat durch. #include <avr/io.h> #include <util/delay.h> int main() { DDRA = 0x1F; DDRB = 0x1F; DDRC = 0x1F; while(1) { PORTC = 0x00; PORTA = 0x1f; _delay_ms(100); PORTA = 0x00; PORTB = 0x1f; _delay_ms(100); PORTB = 0x00; PORTC = 0x1f; _delay_ms(100); } return 0; }
-
Thread
Sind Sie sicher Abfrage, Usart, Atmega32
Hast du auch vorher PC7 auf PortC mit [c] DDRC = (1<<PC7) als Ausgang definiert? [/c] Versuch weiter mit der LED zu debuggen. Verschiebe das toggeln der LED zum Beispiel hier hin: [c] if (strcmp (uart_string, "y" )==0) { PORTC ^= (1<<PC7); uart_string[0] = '\0'; uart_schreibe_string("Daten geloescht"); } [/c] Du musst erstmal herausfinden, wo etwas schief läuft. Dann kann man sehen
-
Thread
Probleme mit Timer bei Phasenanschnitt
Interrupt erlauben TIMSK0 |= (1<<OCIE0A); } ISR( TIMER0_COMPA_vect ) { TCNT0 = 0; PORTC |= (1 << PC5); _delay_us(100); PORTC &= ~(1 << PC5); } [/c] Problem ist jetzt nur, das nicht erst gewartet wird, sondern der Impuls direkt am Nulldurchgang kommt (nach meinen Beobachtungen am
while(1) { } } ISR( INT0_vect ) { TCNT0 = 0; } ISR( TIMER0_COMPA_vect ) { PORTC |= (1 << PC5); _delay_us(100); PORTC &= ~(1 << PC5); } [/c] Soweit ich alles richtig verstanden habe, sollte das Programm ja nun so aussehen. Ich habe Prescaler auf 256 geändert. So müsste
-
Thread
DS1820 an Atmega8 Probleme
m8adef.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config 1wire = Portd.7 Dim Temp(9) As Byte Dim I As Integer Cls Do 1wreset 1wwrite &HCC 1wwrite &H44
danke, nun geht es. allerdings eine verständnisfrage: der wert im array ist doch binär? also in jedem feld (1-9) steht entweder ne 0 oder ne 1? wieso gibt er dann im o.a. quellcode den wert dezimal wieder? erst
-
Thread
high & low Byte zusammensetzen
PORTB &= ~ ( 1 << PB1 | 1 << PB2 ); __disable_interrupt(); PORTB |= (1 << PB2); //PORTC &= ~ (1 << PC0 | 1 << PC4 | 1 << PC1 | 1 << PC5 | 1 << PC3 | 1 << PC2); } [/C]
PORTB &= ~ ( 1 << PB1 | 1 << PB2 ); __disable_interrupt(); PORTB |= (1 << PB2); //PORTC &= ~ (1 << PC0 | 1 << PC4 | 1 << PC1 | 1 << PC5 | 1 << PC3 | 1 << PC2); }
-
Thread
ATmega8 Dauer-Reset
nur kurz Grün. #include <avr/io.h> #include <util/delay.h> int main(){ DDRC=0xFF; PORTC=0x01; while(1) { PORTC=PORTC<<1; _delay_ms(10); _delay_ms(10); _delay_ms(10); _delay_ms(10); _delay_ms(10); _delay_ms(10); _delay_ms(10); _delay_ms
Hi Dann war aber der Ausdruck 'Dauer-Reset' etwas irreführend. Denn da geht garnichts mehr. MfG Spess
-
Thread
PIC18f2550 + USART ?
FSOC = 48Mhz Folgendes hab ich mit aus dem datenblat rausgelesen leider klapt es so nicht ; PORTC banksel TRISC ; Bank Wekseln movlw B'11000000' ; Portc I/O setzen (1=In, 0=Out) (Reinfolge RB7,RB6...) movwf TRISC ; Portc I/O setzen banksel PORTC ; Bank Wekseln clrf PORTC ; Portc auf 0 setzen ; USART initialisieren und Bautrate einstellen banksel SPBRG ; 9600 baud @ 20MHz movlw D'77' movwf SPBRG ;bcf BAUDCON, ABDOV ; Autobautrate
-
Thread
compilerfehler: multiple definition of `fuerporta'
void multiplexSetColumns1(void) { PORTC = (muster1>>1); fuerporta = muster1 & ~0b111111110; fuerporta = (fuerporta<<multiplexLastColumn); PORTA = (fuerporta | PORTA); } // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs) void multiplexSetColumns2(void) { PORTC = (muster2>>1); fuerporta = muster2 & ~0b111111110; fuerporta = (fuerporta<<multiplexLastColumn); PORTA = (fuerporta | PORTA); } void multiplexSetLevel(int freischaltung, int level) {
-
Thread
RGB Led ansteuern und mit Taster Farbe ändern
kann. Leider habe ich eine ich das Polling verfahren genommen und jetzt ist es so das der Taster mal geht und mal nicht. Hier das Programm in Basic: 'Erzeugt ein Blinklicht und wechselt die Farbe bei Tastendruck zwischen RGBCMY Config Portc.5 = Output Config Portc.4 = Output Config Portd.5 = Output
springen. Ja. >Hat mir dafür jemand eine Lösung? Ein Timer. [[AVR-Tutorial: Timer]] Geht auch mit BASCOM sehr gut. >P.S. Andere Sprache geht nicht weil ist nicht! Wozu? BASCOM ist gut! MfG Falk
-
Thread
LED leuchten lassen
; _delay_ms(500); PORTC ^= (1<<PC1); _delay_ms(500); //GElb aus PORTD |= (1<<PD7); //alle Ampeln sind aus PORTC |= (1<<PC4); PORTC |= (1<<PC1); PORTB ^= (1<<PB0); _delay_ms(500); //Fußgänger 1 Rot Ein PORTD ^= (1<<PD6); //Fußgänger 2 Rot Ein _delay_ms(500); PORTC ^= (1<<PC5); //Auto 1 Rot Ein _delay_ms(500); PORTC ^= (1<<PC2); //Auto 2 Rot Ein _delay_ms(500); PORTC ^= (1<<PC4); //Auto A1 und A3 kommt gelb dazu _delay_ms(500); PORTD |
-
Thread
Probleme mit LCD-Display und SPI Übertragung
das Display ist wie folgt verbunden: RS PORTD4 RW PORTD1 E PORTD0 DATA4 PORTC0 DATA4 PORTC1 DATA4 PORTC2 DATA4 PORTC3 Im Anhang ist die LCD Libary. Mein Programm: [c] #include <avr/io.h> #include <avr/interrupt.h> #include "lcd.h" #include "lcd.c" volatile
wie folgt > verbunden: > > RS PORTD4 > RW PORTD1 > E PORTD0 > DATA4 PORTC0 > DATA4 PORTC1 > DATA4 PORTC2 > DATA4 PORTC3 Sicher? Ich würde es mal mit Data7, Data6, Data5 und Data4 versuchen.
-
Thread
XMEM - Mega1281 - Ganzen exterenen 64kB SRAm nutzen
diesen Platz belegen. Verwendet man nur 32kB und schaltet A15 per Hand um (also quasi Banking), dann geht es.
ignoriert werden (bei 0x1FFF sind diese ja unbenutzt). ergo gibt die doku an, lediglich 5 bits des PORTC zu benutzen. für den 1281: der hat wohl 8k sram == 0x0000 bis 0x2FFF. dafür müssen nur die obersten beiden bits von PORTC ignoriert werden. entsprechend 6 nutz-bits dieses ports (XMM1 gesetzt, der
-
Thread
UART (MAX232)
Hallo... Ich hab mal wieder eine Frage, und zwar geht es um die Beschaltung des MAX232. Ich habe hier eine Schaltung, die nicht funktioniert. (AVR AT90S8535 via MAX232 -> PC) Ich habe mit meinem Oszi mir einmal das Ausgangssignal angeschaut, und das sieht
- PortC als Ausgabeport eingerichtet - Interrupts eingeschaltet Ich bin also mit Hyperterminal zugange gewesen, aber die LEDS am PortC blieben komplett an (wie Zustand nach Reset) (Hyperterminaleinstellung
-
Thread
Softuart um midi zu senden
Freudentränen laufen mir über die backen... geht doch, GEHT DOCH!! Das tool, das ich verwendet hab war einfach n sch.... mit der hardwareuart tuts jetzt, einfach das falsche gesendet. das geniesse ich jetzt erstmal, bevor ich mich wieder entmutigen
dauernden Invertiererei mit den Optos - irgendwann hat man dann ´nen Knoten im Hirn. Wichtig ist, es geht, bei mir tut´s ja auch alles geh´n trotz des Hirnknotens ;-). Zum Klarstellen nochmals: Das U(S)ART ist gegenüber Masse logisch HIGH, solange nix passiert, geht auf logisch 0 für das Startbit, toggelt
-
Thread
externer 32,768kHz Crystal für Timer1 funktioniert nicht PIC16F1823
] void interrupt(void) { if(PIR1.TMR1IF == 1) //interrupt from Timer1? { PORTC.B2 = 1; //nur zum testen! ob er überhaupt in die ISR geht PIR1.TMR1IF = 0; //re-enabling the interrupt TMR1H = 0x80; //high byte TMR1L = 0x00; //low byte }
define PORTA digital TRISA = 0xFF; // define PORTA as input TRISC = 0x00; // define PORTC as output PORTC = 0x00; PORTC.B2 = 0; TIMER1_Init(); while(1) { } } [/c] und ich bin drauf gekommen das er am Ende der INIT bei der while-Schleife
-
Thread
Amega8 Kommunikation mit Interrups
} void Timer1_AUS(uint16_t anzSchritte) { TCCR1B = (0<<CS10); //Timer1 aus //PORTC = 0b11111111; //Ausgang PortC PORTC = (1 << PC0); for(int i = 0; i < anzSchritte; i++) { _delay_ms(10); //Wartezeit midestens 10 ms } } ISR(TIMER1_OVF_vect) { Timer1
USART_Transmit(data3); //Übertragen data3 PORTB = (1 << PB1); //PB1 deaktivieren, LED geht aus TCCR1B = (0 << CS10); //Timer1 aus PORTC = (1<<PC0); //PC0 auf 1 legen, Ausgangszustand } else { stepsTiH = data1; //Definieren stepsTiH
-
Thread
nRF24L01+ geht nicht
Hallo, ich habe eben auf Steckbrett die Schaltung gemäß Tutorial (http://www.mikrocontroller.net/articles/NRF24L01_Tutorial) aufgebaut. Leider bringe ich einfach keine Übertragung zustande... Um die Hardware zu prüfen, habe ich auf Sender und Empfänger-Seite jeweils den Kanal ausgelesen. Funktionierte bei beiden ohne Probleme. Nun möchte ich jedoch testweise ein Byte übertragen und mithilfe von LEDs ausgeben. Diese bleiben jedoch immer dunkel... Hier mal der Code für den Empfänger - bin ich nur blind? [c] /* * nRF24L01_Tutorial_RX.c * * Created: 06.01.2012 22:51:57 * Author: Ernst
-
Thread
Midi mit Bascom und AVR
Um 8 Relais anzusteuern benötigst du kein Midi. Das geht mit 8 Transistoren oder besser einem Array von Transistoren (Vorwiderstand nicht vergessen). Programmchange ist nur bei bereits midifizierten Geräten angebracht. Wenn keine Notendaten oder Sysex
Konstanten ' --------------------------------------------------------------- Relais1 Alias Portc.5 'Relais Namenvergabe Relais2 Alias Portc.4 Relais3 Alias Portc.3 Relais4 Alias Portc.2 Relais5 Alias Portc.1 Relais6 Alias Portc.0 Plus Alias Pind.5 ' Schalter Namenvergabe
-
Thread
LTC1257 Low Level Routinen
ich auf der rechten Seite DACIN oder DACOUT verwende. Bisher las ich Portausgänge auch über z.B. PORTC: z.B. [c]PORTC = PORTC | (1<<DATA)[/c] Was wäre der Unterschied zu : [c]PORTC = PINC | (1<<DATA)[/c] so wird es ja hier verwendet , oder? Noch eine kleine Frage zu diesem Tutorial/Code
MCP4922 jetzt nicht die besten Erfahrungen gemacht, um nen Netzteil 0..15V vernünftig zu steuern geht's grad noch so. Im unteren Bereich liegt er unterhalb der Nennspannung, im mittleren passt' so la la und im oberen liegt er oberhalb der Nennspannung. Ich dachte zuerst der Fehler läge bei mir, Dave
-
Thread
ATmega8 PB2 (nicht INT0) als Eingang
und 5Volt über Pullup. $regfile = "m8def.dat" $baud = 19200 $crystal = 11059200 Config Portc.0 = Output Led Alias Portc.0 Config Pind.2 = Input Ausloeser Alias Pind.2 Do Portd.2 = 1 Waitms 20 Led = Ausloeser Loop
Entprellung über den Kondensator kann man sich eigentlich sparen, wenn man eh auf einen Mikrocontroller geht damit.
-
Thread
Wie schlimm sind Wartezyklen auf ARM-Prozessoren?
Horst schrieb im Beitrag #5394033: > Ductus cochlearis (Gast) schrieb: >> In diesem Thread geht es darum, > daß Du Dich auf Kosten anderer amüsierst. Nope. Es geht darum, daß ein anderer Thread, in dem es darum geht, wie man Wartezeiten sinnvoll implementiert, nicht mit dem völlig anderen
Ductus cochlearis schrieb im Beitrag #5394135: > Das ist aber nicht hilfreich. Es geht immer noch darum: Warum sind > Wartezeiten auf einer ARM-MCU um jeden Preis zu vermeiden? Nein. Es geht um "Wie schlimm sind Wartezyklen auf ARM-Prozessoren?". Die Antwort lautet: "Nicht sehr
-
Thread
Programmierung von ATmega8-16PU macht Probleme
ich während des Programmiervorgangs mit einer Krokoklemme den > Reset-PIN auf Masse ziehen oder geht da was kaputt? Das kannst du und es geht nix kaputt... leider nützt es aber auch nix. Der Reset geht beim Proggen ja nur kurz auf Low um den Vorgang einzuleiten. Dauerreset verhindert also das
Hi > DDRB = 0xff; > // Alle LEDs an > PORTC |= (1 << 0); /* PIN aktivieren */ Wenn du zu Ausgabe PortC nimmst, solltest du auch *DDRC* auf Ausgang setzen. MfG Spess
-
Thread
Keine Interrupts beim Mega8
> #define LED_HI_TGL {PORTC ^= 0x20;} Was sollen den die {} und das ;? Besser wäre #define LED_HI_TGL PORTC ^= 0x20
Dafür wäre die gängige Umschreibung [C] #define LED_HI_TGL do { PORTC ^= 0x20; } while (0) [/C]
-
Thread
Programmierfehler? C Anfänger Atmega8
ausgeführt. Die Endlosschleife später im Code ist zum "Beenden", des Programms. das am anfang geht vielleicht anders besser, aber ich weiß nicht wie.
den 4 LEDs binär angezeigt wird. > ... > - Die Dezimalzahlen werden nicht richtig angezeigt > PORTC = page; Kann es vielleicht sein, dass die LEDs gegen VCC angeschlossen sind? Dann musst du /page/ für die Ausgabe invertieren: PORTC = ~page & 0x0f;
-
Thread
Relais schaltet aus statt ein
vom Temp. - sensor ///t_soll/ kommt von PIND if((t_ist <= t_soll + 1)) //&& !(PORTC & (1<<RELAIS_C))) { //Heizung //an //(Relais HIGH) PORTC |= (1<<RELAIS_C); } else if((t_ist >= t_soll - 1))// && (PORTC & (1<<RELAIS_C))) {
führt dazu das das Relais an geht aber nicht mehr aus beim Überschreiten der Soll Temp
-
Thread
Kann mir einer Start Hilfe geben?
1000000 Config Portb.0 = Output Config Pind.7 = Input Portd.7 = 1 Config Pinc.1 = Input Portc.1 = 1 Do Loop End Ich komm einfach nicht weiter. Ich will doch blos das die LED leuchtet, wenn ich 1 Taster drücke und dann aus geht wenn ich beide zusammen drücke. Danke erstmal
positive Flanke erzeuge. Ich möchte das die LED nur beim Wechsel eines Tasters von 0 auf 1, an geht. grazie
-
Thread
"Gruppierung" von Pins
Beitrag #6777168: > Man kann keinen Pointer auf einen einzigen Pin zeigen lassen, korrekt? Das geht bei AVR Mikrocontrollern nicht.
{ &PORTB, 0x08 }, { &PORTB, 0x10 }, { &PORTB, 0x20 }, { &PORTB, 0x40 }, { &PORTC, 0x02 }, { &PORTC, 0x08 }, { &PORTC, 0x80 } }; #define PINS_COUNT (sizeof(pins) / sizeof(portpin_t)) static void pinout(portpin_t* pp, bool high) { if(high) { *(pp->port
-
Thread
AVR, Externer Interrupt 11 beim Atmega168 -> Howto-Problem
------------------------ ' Port-Settings (Beispiel) ' ------------------------ Sensor_1 Alias Portc.3 ' PCINT 11 Sensor_2 Alias Portc.2 ' PCINT 10 Sensor_3 Alias Portc.1 ' PCINT 9 Sensor
Flags, die Du auswerten kannst. So gelangst Du > zu den auslösenden PCINT. > MfG > Bert Sonst gehts noch???
-
Thread
LCD Routine (C) bringt fehler
befehlt .. lcd_init(...) nicht und macht nur ärger oder lcd_puts(....) funktoniert auch nicht. es geht einfach garnix :) vielen dank
uint16_t i; for (i=0; i<z; i++) delay_us_(999); } void lcd_flash_e (void) { PORTC|=(1<<DDC4); delay_us_(5); PORTC&=~(1<<DDC4); delay_us_(50); } void lcd_write (uint8_t data, uint8_t rs) { uint8_t dataBits ; if (rs)
-
Thread
Frage zur UART Mega328
" if (chars=='A') { PORTC=(1<<DDC1); } PORTC=0x00; } " Das wird in einer sehr schnellen Endlosschleife wiederholt ausgeführt. Wenn du ein A schickst, ist PC1 für ein bis zwei CPU Takte (paar
wäre PORTC=(1<<PC1). Noch richtiger wäre PORTC |=(1<<PC1); zum Einschalten und PORTC &= ~(1<<PC1); zum Ausschalten. Unterschied: Mit diesem beiden Befehlen änderst du nur das eine Bit, was du ändern
-
Thread
DS18S20 auslesen (finde den fehler nicht)
ow_reset() stimmt also der ds18s20 antwortet So gesehen JA! Schmeiss mal diese Code Zeilen PORTC |= (1<<PC5) und das PORTC &= ~(1<<PC5); raus Es reicht völlig mit DDRC zuarbeiten. PULL-UP Ein- und Auschalterei ist völlig überflüssig. Und mach das hier endlich in main rein. PORTC =
Ist schon mal die halbe Miete. Der Sensor macht im Normalbetrieb 0,5°C Schritte. Mit dem Sensor geht auch 0,1 °C Schritte.
-
Thread
Atmega8 und Reset
void Init(void) { DDRC |= (1 << DDC0); // Bit 0 auf Ausgang setzen // Zweimal blinken PORTC &= ~(1 << PC0); _delay_ms(100); PORTC |= (1 << PC0); _delay_ms(100); PORTC &= ~(1 << PC0); _delay_ms(100); PORTC |= (1 << PC0); } int main(void) { Init(); while(1) { } } Wenn ich per STK600 das Programm zum Atmega8 übertrage, blinkt die LED an PortC zweimal, wie gewünscht. Wenn ich aber den Reset-Knopf am STK600 drücke, dann blinkt die LED nichtmehr, sondern bleibt aus. Habe an PC6 (RESET) gemessen, der geht auf Low wenn ich den Reset-Taster
-
Thread
serielle Daten über einen Pin einlesen
nochmal an Alle! Und zwar bin ich auf folgendes Problem gestoßen. Ich bekomme an einem Eingang (PORTC, PIN=0) serielle Daten. Diese möchte ich nun bitweise einlesen und abspeichern. Meine Idee sieht so aus: for (BitCounter=0;BitCounter<80;BitCounter++) { Speicher[ChipIdBitCounter] = inp
irgendwas haben, was an PINC den Empfang des nächsten Bits triggert. Das kann z. B. sowas sein wie: PORTC |= (1 << yourtriggerbit); PORTC &= ~(1 << yourtriggerbit); um einen kurzen Impuls des yourtriggerbit-sten Bits in PORTC auszulösen. Die Schreibweise ist so ganz und gar gängig (bspw. in den
-
Thread
PWM Tonhöhe und Lautstärke
binary_foo_bin_end - _binary_foo_bin_start; DDRC=0xFF; for (i=0; i<size; i++) { PORTC = pgm_read_byte(&_binary_foo_bin_start[i]); } } [/c] Man muss nur noch das Objektfile dem Linker mitteilen, das geht in den Projektoptionen unter AVR Studio 4.18 so. Project -> Configuration
@ Konrad S. (maybee) >Nicht als Library einbinden. Wie dann? Im AVR Studio geht es.
-
Thread
Pollin Board macht nicht was es soll mit ATMega16
unterbrochen und wieder angeschlossen, damit der µC "von vorne anfängt". Wenn ich nun den Taster1 drücke geht auch die LED 1 an, und beim Wiederholten drücken wieder aus. Bei Taster2 geht natürlich die LED 2 ein und aus. Beim Taster3 hört man nur ein kurzes Knacken aus dem Lautsprecher. Nach ca 4 Minuten
oben gepostet hat compiliert und geflasht. Natürlich mit 16000000 als Quarzwert. Beim Taster 1 geht LED 1 an. Beim Taster 2 geht LED 2 an. Soweit alles ok. Bei Taster 3 passiert nichts. Beim Resetten knackt der Piezo wenn davor TAster 3 gedrückt wurde. grüße, Jaki
-
Thread
ASM Codeproblem
. LCD_Clear: cbi PORTC, 7 ldi XL, 0x00 ldi XH, 0x80 ;externes RAM ab 0x8000, mit AC7 low beginnt Speicher damit bei 0 clr temp ldi temp1, 0x00 ;Ende ATMega Speicher (0xFFFF) wenn XH = 0xFF + 1 rcall LCD_Clear_loop sbi PORTC, 7 ldi XL, 0x00 ldi XH, 0x80 rcall LCD_Clear_loop cbi PORTC, 7 sbi PORTD, AB16 ;Adreßbit an ldi XL, 0x00 ldi XH, 0x80 ldi
-
Thread
AVR Bascom Befehl Case div. Pins abfragen
: Portc.5 = 1 'LED an (Pin PC5) wait 6 End Select Loop End
Würd' mal sagen: [code]If Eingabe <> PortC Then Geht Nicht Else Nix kapiert End If[/code]
-
Thread
RS485 nach 2,5 Paketen ist schluss
MAX485 an Board B, an Rx an?! Durch die Peaks sieht man ja, dass Board B in die empfangs routine geht und sie zu früh verlässt. Das erste Paket kommt an und die erste Antwort geht fehlerfrei raus. Board B geht das zweite Mal in die Empfangsroutine und empfängt nicht vorhandene Daten und stoppt
Ohne Autolinefeed void rs485_send_16Byte(uint8_t *s) { uint8_t i = 0; _delay_ms(15); PORTC |= (1<<PORTC4); //RS485 auf Sendemodus _delay_ms(5); while(i<16) { rs485_putc(*s); s++; i++; } _delay_ms(5); PORTC &= ~(1<<PORTC4); //sendemodus beenden - Empfänger
-
Thread
SPI interface, Accelerometer LIS3LV02DQ
|= (1<<PC5); } void setLed(unsigned char state){ switch (state) { case 0: PORTC &= ~(1<<5); break; case 1: PORTC |= 1<<5; break; default: if (PORTC & 1<<5) PORTC &= ~(1<<5); else PORTC |= 1<<5; } } void
leitung vergessen gehabt zu setzen und zum andern muss man (1<<CPHA) machen, damit das funktioniert. geht aber so nicht aus dem Datenblatt hervor, oder?! werde das prog bei gegebener zeit hier posten.
-
Thread
Problem mit DCF 77,5 Modul
' default use 40 for the frame space 'Config Portb.0 = Output Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 4 'configure lcd screen Cursor Off Noblink Config Portd.5
rührt sich gar nix. Aber wieso ist der Ausgang des DCF Moduls immer low? Beim gleichem Standort geht das Modul ja mit dem Aldi Wecker.
-
Thread
SJA1000 und ATmega32A
PORTA &= ~(1<<ALE); } void Canreg_Write(uint8_t Adresse, uint8_t Daten){ DDRC = 0xFF; // PortC Ausgang PORTC = Adresse; // Adresse ausgeben PORTA |= (1<<ALE); // ALE Low asm volatile ("nop"); PORTA &= ~(1<<ALE); // ALE High PORTC = Daten; // Daten ausgeben PORTA
PORTA |= (1<<WR); // WR High } uint8_t Canreg_Read(uint8_t Adresse){ DDRC = 0xFF; // PortC Ausgang PORTC = Adresse; // Adresse ausgeben PORTA |= (1<<ALE); // ALE Low asm volatile ("nop"); PORTA &= ~(1<<ALE); // ALE High DDRC = 0x00; // PortC Eingang PORTC
-
Thread
AVR-Studio und Stack
aber erst bei $60 ($100 beim 128er) an, drunter sind schließlich noch Register und I/O gemappt. Also geht er auch $60 ($100) Zellen weiter...
speichern ldi LED_Temp, 0xFF out DDRC, LED_Temp ;Richtungsregister konfigurieren: PortC = Ausgang ldi LED_Temp, 0b00000011 out DDRE, LED_Temp ;Bit 0 und 1 von PortE sind Ausgänge ldi LED_Temp, 0xFF out PORTC, LED_Temp ;Anzeige ausschalten ldi LED_Temp
-
Thread
Timer beim AVR, ich kapiers nicht
anderen kann ich mir noch einen anderen Fehler vorstellen: Im Hauptprogramm toggelst du einen Pin am PORTC, im Timer-Interrupt toggelst du einen anderen Pin, auch am PORTC. Das toggeln eines Pins kann bei einem AVR nie atomar sein, man braucht dazu also immer mehr als nur eine Anweisung, bei der immer
nun, dass ein Timer-Interrupt just nach dem Einlesen des Ports im Hauptprogramm stattfindet, deinen PORTC.1 toggelt und nachdem die INT-Routine abgearbeitet wurde, überschreibt das Hauptprogramm deinen grad getoggelten PORTC.1 wieder mit dem alten Wert. Das ganze nennt sich Race-Condition, Stichwort
-
Thread
2 ICs 74HCT595 an MEGA8
es sollten doch nur "Nullen" an den Ausgängen von IC2 sein PORTC=~muster;// Kontrolle des auszugebenden Bytes, wird an PORTC richtig angezeigt PORTD &=~ 1<<shiftpd3; // PD3 Shift PORTD &=~ 1<<storepd1; // PD1 Store for(int i=0;i<=7;i++
Ich habe es auch mit der SPI Hardware im Mega 8 gemacht. Geht wunderbar. Hier der Artikel dazu: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Porterweiterung_f.C3.BCr_Ausg.C3.A4nge Dennis
-
Thread
Ports für GLCD
anschliesse, diesen Port benötige ich jedoch für den ADC, daher dachte ich mir, ich nehme halt ganz einfach portC als Dataport, alles entsprechend umgelötet und in Bascom eingestellt. Genau da liegt mein Problem, denn wenn ich die Datenleitungen an PortC anschliesse, dann funktioniert mein GLCD nicht mehr, bzw
JTAG ist disablet lt. Bascom, ich nehme mal an, das dies von Werk aus schon disablet ist daja sonst portc.2 - portc.5 nicht zur Verfügung stehen würden. Der uC selbst ist ca. 2 jahre alt. Achso unter einem 8535er geht dies ebenfalls wie beim ATMega32 auch nur auf PortA.. Danke aber für deine Info...
-
Thread
AVR mit DS1820 Fehlausgabe
-- ' LCD: Db4-Db7 = Portd.4-Portd.7 E = Portd.3 Rs = Portd.2 Backlight = Portb.1 ' I2C: Sda = Portc.4 Scl = Portc.5 ' UART: RxD = Portd.0 TxD = Portd.1 ' 1wire Portb.0 ' Frei: Portb.2-Portb.5 Portc.0-Portc.3 '------------------------------------------------------------------------------ $regfile
angesetzt jedoch kommt da nix. Widerstand von 4,7k oder 10k zwischen VDD und Pinc5 hatte ich auch. Geht ohne nicht und geht auch mit nicht. Habe ich einen Fehler im Code oder ist der Chip defekt? Danke für die Hilfe!!! P.S. Mache alles im BASCOM Grüsse
-
Thread
Custom character bei Display mit HD44780
7 Font PORTC = 0b00000000; //Enable PORTC = 0b00000001; _delay_ms(500); PORTA = 0b00001111; //Display an, Cursor move, Cursor blinkt nicht PORTC = 0b00000000; //Enable PORTC
= 0b00000000; //Enable PORTC = 0b00000001; PORTD = 0b00000001; //Data mode PORTA = 0b00000000; //Schreibe neues Zeichen --> nichts passiert PORTC = 0b00000000; //Enable PORTC = 0b00000001;
-
Thread
Frage zu meiner Schaltung
nicht und das 574 nicht. Schreiben sieht also so aus (Grundzustand PD6=1 PD7=0 DDRC=output): PORTC=A0..A7 PD7=1 PD7=0 nun ist das untere Adressbyte in IC2. PORTC=A8..A12,OE=1,WE=0 PD7=1 PD7=0 nun ist das untere Adressbyte in IC3 und das obere mitsamt OE/WE in IC2. PORTC=Daten PD6=0 PD6=1 Fertig. Lesen geht ähnlich, nur muss zum richtigen Zeitpunk DDRC umgeschaltet werden.
-
Thread
AVR GCC: Problem mit Variable in Main und ISR
Register kann ja sowohl in der Main als auch in der IRQ-Routine zugegriffen werden. Der Compiler geht allerdings davon aus, dass die Variable y=0 ist, das sie ja global initialisiert und dann in der Main nicht mehr geändert wurde. Also spart er sich den Vergleich. > Noch eine Anmerkung: Die Zuweisung
delay.h> #include <avr/interrupt.h> int y; uint32_t x; int main(void) { DDRC=0x03; PORTC=0x00; sei(); TCCR1B = 0x01; TIMSK|=(1<<TOIE1); while (1) { y=1; sei(); } } ISR(TIMER1_OVF_vect) { if (y==1){ PORTC=(1<<PORTC0);