Gast
#850593
Hallo zusammen!
Folgendes zu meinem Aufbau:
Ich benutze einen ATtiny45, der mir Signale über MISO, MOSI und SCK
ausgibt. Die programmierte Ausgabe ist fest und kann nicht verändert
werden. Ablauf wie folgt:
1) MOSI setzen
2) SCK auf "1"
3) SCK auf "0"
Das Ganze geschieht neun mal, danach triggert die MISO-Leitung einmal
auf "1" und wieder zurück auf "0".
Soviel zu den vorgegebenen Aufbau.
Was ich nun mit einem zweiten tiny45 machen möchte ist, den Zustand des
MOSI-Pins jeweils zu dem Zeitpunkt speichern, wenn auch SCK auf High
ist.
Also grob gesagt, die Ausgabe des ersten Controllers mit einem zweiten
speichern. Danach das Ganze an einem anderen Pin nacheinander wieder
ausgeben. Habe mir dazu folgendes überlegt:
//PB0 = MOSI
//PB1 = MISO
//PB2 = SCK
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
(z.B. durch Übergabe als Parameter zum Compiler innerhalb
des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
"nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 8000000
definiert"
#define F_CPU 8000000UL /* interner RC mit 8 Mhz */
#endif
void main (void){
DDRB = 0b00011000;
unsigned int input_buffer=0;
unsigned char count_in;
unsigned char count_out;
unsigned int output_buffer=0;
while(1){
//Speichern der Messwerte
while(!(PINB & (1<<PB1)));
for(count_in=0;count_in<9;count_in++){
loop_until_bit_is_set(PINB, PB2);
if(PINB & (PINB<<PB0)){
input_buffer++;
}
input_buffer = input_buffer<<1;
}
//Ausgabe des Bitstromes
output_buffer = input_buffer;
PORTB &= ~(1<<PB4);
PORTB |= (1<<PB4);
_delay_us(250);
PORTB &= ~(1<<PB4);
_delay_us(250);
for(count_out=0; count_out<9; count_out++){
if(output_buffer & (1<<count_out)){
PORTB |= (1<<PB4);
_delay_us(100); }
else{ PORTB &= ~(1<<PB4);
_delay_us(100);
}
}
input_buffer=0;
output_buffer=0;
}
}
Die Ausgabe funktioniert wunderbar, wenn ich dem output_buffer eine
Bitfolge vorgebe, nur leider scheint es am Speichern zu hapern.
Ich bekomme immer die selbe Ausgabe: 1. Bit "0", danach nur noch "1".
Wäre nett, wenn mir jemand auf die Sprünge helfen könnte.
mfg Yorgi
PS: Die Eingangs- und Ausgangspins des zweiten µC kontrolliere ich mit
einem Logic Analyzer, die Zeiten dabei passen, nur die Werte nicht.