Hey Liebe Elek'er, bin eine "dummy" :D und ich versuche gerade ein absolut Drehgeber mit meinem Atmega88 auszulesen. Habe ein c code beim googlen gefunden und kann schon die werte über Usart auf my pc anzeigen (mit der spi_read methode siehe source code.). jetzt möchte ich aber die daten (uint16_t u16singleturn) paralllel ausgeben am Pin (Port) die übrig sind (PC0...5 , PD3...7,usw...)oder am zwei 74HC595 . Meine Fragen: 1)( Methode Spi_read () siehe source code). wie kann ich zum Bspl. eine uint8_t variable am PC0...5 und PD4,5 ausgeben. (mit MSB am PC0 und LSB am PD5 oder umgekehr) ? DDRC = (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 <<DDC4)| (1 <<DDC5); //oder DDRC=0x3F; DDRD = (1<<DDD4) | (1<<DDD5) ; und dann ? 2)(Methode pinToggleReadSSI( void )) .für die Ausgabe mit zwei 74*595. ich nehme an RCK liegt am PB3, wie mache ich ein 010 am PB3 um die daten am Latch ausgang zu haben. so?: DDRB = ( 1 << DDB3); PORTB=(1<<PB3); PORTB=~(1<<PB3); PORTB=(1<<PB3); ? 3)(und falls Ihr etwas zeit habt ;) ,würde mich sehr freuen). Für die Ansteuerung via Software hier(http://www.rn-wissen.de/index.php/Portexpander_am_AVR#Ohne_SPI-Hardware) , wie würde dann serpa.c ausehen mit zwei 74*595 (also uint16_t u16data ist auszugeben) und: PC0->SCK PC1->RCK PC2->SER ? Schaltung und Software zum Auslesen des Absolut drehgeber habe ich hier gefunden (pdf): http://www.posital.eu/en/products/POSITAL/AbsoluteEncoders_Context/AbsoluteEncoders_Context_Technology_SSI_AppNote.pdf (bin etwa verwirrt mit dem avr gcc und Portexpander tuto ) danke im voraus ;)
Gast
#2072191
Claudia Sauer schrieb: > Meine Fragen: Bin nicht mehr ganz fit und Code ungetestet, nur im Kopf gedebugged, also ohne Gewähr ;-) > 1)( Methode Spi_read () siehe source code). wie kann ich zum Bspl. > eine uint8_t variable am PC0...5 und PD4,5 ausgeben. (mit MSB am PC0 und > LSB am PD5 oder umgekehr) ? > DDRC = (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 > <<DDC4)| (1 <<DDC5); //oder DDRC=0x3F; > DDRD = (1<<DDD4) | (1<<DDD5) ; > und dann ? Besser -->
1 | |
2 | |
So überschreibst du nicht die anderen Bits des Registers. LSB an PC0 und PC6 und 7 nicht überschreiben:
1 | |
2 | |
MSB an PC0 und .... , allerdings sehr unschön:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
> 2)(Methode pinToggleReadSSI( void )) .für die Ausgabe mit zwei 74*595. > ich nehme an RCK liegt am PB3, wie mache ich ein 010 am PB3 um die > daten am Latch ausgang zu haben. so?: > DDRB = ( 1 << DDB3); > PORTB=(1<<PB3); > PORTB=~(1<<PB3); > PORTB=(1<<PB3); Wie oben so überschreibst du nicht andere Bits des Registers. DDRB |= (1<<DDRB); PORTB |= (1<<PB3); PORTB &= ~(1<<PB3); PORTB |= (1<<PB3); > 3)(und falls Ihr etwas zeit habt ;) ,würde mich sehr freuen). Für die > Ansteuerung via Software > hier(http://www.rn-wissen.de/index.php/Portexpander_am_...) Sry das gucke ich mir morgen an, gehe erstmal Bett ! Gruss und viel Erfolg.
Gast
#2072192
Jean Player schrieb: > DDRB |= (1<<DDRB); Sry natürlich DDRB |= (1<<PB3); N8
Jean Player schrieb: > Jean Player schrieb: >> DDRB |= (1<<DDRB); > > Sry natürlich DDRB |= (1<<PB3); > wow !danke für deine Schnelle Antwort.! > N8 ;) danke u too ! und bis morgen !
Gast
#2072195
Jean Player schrieb: > unsigned char LSBS |= variable & 0x40 ? 0x10 : 0x00; > LSBS |= variable & 0x80 ? 0x20 : 0x00; Oh Gott hier fehlt natürlich auch noch: PORTD |= LSBS; So jetzt aber N8
hey Jean >> 1)( Methode Spi_read () siehe source code). wie kann ich zum Bspl. >> eine uint8_t variable am PC0...5 und PD4,5 ausgeben. (mit MSB am PC0 und >> LSB am PD5 oder umgekehr) ? >> DDRC = (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 >> <<DDC4)| (1 <<DDC5); //oder DDRC=0x3F; >> DDRD = (1<<DDD4) | (1<<DDD5) ; >> und dann ? > Besser --> >
1 | |
2 | |
3 | |
> So überschreibst du nicht die anderen Bits des Registers. ok danke ;) 1) > LSB an PC0 und PC6 und 7 nicht überschreiben: >
1 | |
2 | |
3 | |
hmmmm bin etwa vewirrt. wenn ich am Portc 0b11111111 und var =0b00000000 also var& 0x3F =0b00000000 dann bekomme ich am ende Portc= 0b11111111 oder 0b11000000 ? oder Funktioniert das "|=" ? ich habe mir das bei AVR gcc angeschaut und andersrum verstanden also wie ein Portc= Portc "oder"(var&0x3F).... 2) kann man nicht auf einzelne Pin zugreifen zum beispiel PC0 = Var&0b00000001 ? 3) wenn var eine uint16_t ist muss ich die zuweisung wie folgt durchführen ?: PORTC |= uint8_t (var & 0x3F);//bzw. var & 0x0b00111111 PORTD |= uint8_t((var & 0xC0) >> 2);//bzw var&0b11000000 > Gruss und viel Erfolg. Danke !
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
