Datum:
Hallo zusammen, ich habe vor kurzem den AVRISP mkII erhalten. Mein Problem ist, dass der Controller etwa im Sekundentakt zurückgesetzt wird, wenn der mkII an der SPI Schnittstelle hängt. Ist das normal bei dem Gerät? Ich finde es ziemlich unpraktisch, immer wieder abstecken zu müssen, damit das Programm durchläuft. Ich nutze das Pollin Board. Vielen Dank im Voraus. Mfg, Andreas
Datum:
Hallo Andreas, also normal ist das nicht - so viel kann ich sagen. Mein Pollin-Board führt auch bei aufgestecktem MKII keine Resets zur Laufzeit durch. Allerdings hat ein Bekannter von mir das gleiche Problem wie Du: sobald der den MKII aufsteckt führt sein Board ständig Resets durch. Wenn ich mich richtig erinnere passiert das bei ihm allerdings auch nur, wenn gleichzeitig ein Netzwerkstecker eingesteckt ist. Aber auch dann bleibt mein Board stabil. Woran es liegen könnte wissen wir bisher aber auch noch nicht.
Datum:
Danke Torsten Gerade in diesem Moment läuft er wieder durch. (Nach zwei anfänglichen Resets nach dem Anstecken. Aber sobald ich manuell per Taster Reset auslöse gehts auch wieder los mit dem sekündlichen Resets.
Datum:
Falls es am Code liegt hier das Programm. momentan nur Testroutine in der main Funktion.
/* * Cocktailmaschine_Mainboard.c * * Created: 26.04.2012 20:35:27 * Author: Andreas F. Cocktailmachine Firmware Copyright (C) 2012 Andreas F. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*-----------------Einstellungen------------------*/ #ifndef F_CPU #warning "F_CPU war nicht definiert. Wird jetzt definiert" #define F_CPU 16000000UL #endif /*-------------------Includes---------------------*/ #include <avr/io.h> #include <util/delay.h> /*------------Defines für Motor-Pins--------------*/ /*Motor 1*/ #define en1 PA0 #define dir1 PA1 #define clk1 PA2 #define m1_port PORTA /*Motor 2*/ #define en2 PB0 #define dir2 PB1 #define clk2 PB2 #define m2_port PORTB /*Motor 3*/ #define en3 PC2 #define dir3 PC3 #define clk3 PC4 #define m3_port PORTC /*Motor 4*/ #define en4 PC5 #define dir4 PC6 #define clk4 PC7 #define m4_port PORTC /*------------Defines für Pollin-Board------------*/ /*SPI-Bus*/ #define MOSI_pin PB5 #define MISO_pin PB6 #define SCK_pin PB7 /*I²C-Bus*/ #define SCL_pin PC0 #define SDA_pin PC1 /*RS232*/ #define RXD_pin PD0 #define TCD_pin PD1 /*LEDs und Taster*/ #define Taster1 PD2 #define Taster2 PD3 #define Taster3 PD4 #define LED1 PD5 #define LED2 PD6 #define Summer PD7 /*------------------Konstanten--------------------*/ #define BAUDRATE 9600UL #define TIME 500 /*------------------------------------------------*/ void beep () { for (int i=0;i<100;i++) { PORTD |= (1<<Summer); _delay_us(500); PORTD &= ~(1<<Summer); _delay_us(500); } for (int i=0;i<100;i++) { PORTD |= (1<<Summer); _delay_us(270); PORTD &= ~(1<<Summer); _delay_us(270); } } void motor1_run(int dir, int steps) { //Enable Bit setzen m1_port |= (1<<en1); //Direction Bit if (dir == 1) m1_port |= (1<<dir1); else m1_port &= ~(1<<dir1); //CLOCK senden for (steps;steps>0;steps--) { m1_port &= ~(1<<clk1); _delay_ms(100); m1_port |= (1<<clk1); _delay_ms(100); } //Enable Bit löschen m1_port &= (1<<en1); } void motor2_run(int dir, int steps) { //Enable Bit setzen m2_port |= (1<<en2); //Direction Bit if (dir == 1) m2_port |= (1<<dir2); else m2_port &= ~(1<<dir2); //CLOCK senden for (steps;steps>0;steps--) { m2_port &= ~(1<<clk2); _delay_ms(100); m2_port |= (1<<clk2); _delay_ms(100); } //Enable Bit löschen m2_port &= (1<<en2); } void motor3_run(int dir, int steps) { //Enable Bit setzen m3_port |= (1<<en3); //Direction Bit if (dir == 1) m3_port |= (1<<dir3); else m3_port &= ~(1<<dir3); //CLOCK senden for (steps;steps>0;steps--) { m3_port &= ~(1<<clk3); _delay_ms(100); m3_port |= (1<<clk3); _delay_ms(100); } //Enable Bit löschen m3_port &= (1<<en3); } void motor4_run(int dir, int steps) { //Enable Bit setzen m4_port |= (1<<en4); //Direction Bit if (dir == 1) m4_port |= (1<<dir4); else m4_port &= ~(1<<dir4); //CLOCK senden for (steps;steps>0;steps--) { m4_port &= ~(1<<clk4); _delay_ms(100); m4_port |= (1<<clk4); _delay_ms(100); } //Enable Bit löschen m4_port &= (1<<en4); } void wodka_lemon() { motor1_run(0,100); motor2_run(0,500); } int main(void) { /*----------------Initialisierung-----------------*/ /*Ports konfigurieren 1=Ausgang 0=Eingang*/ DDRA = 0b00000111; //MOSI, MISO, SCK, SCL, SDA, RXD und TXD ??? DDRB = 0b00000111; DDRC = 0b11111100; DDRD = 0b11100010; /*Grundzustand Ports CLK Signale werden standardmäßig auf HIGH gesetzt (CLOCK von L297 Active Low)*/ PORTA = 0b00000100; PORTB = 0b00000100; PORTC = 0b10010000; PORTD = 0b00000000; /*-----------------Hauptprogramm------------------*/ beep(); while(1) { PORTD &= ~(1<<LED1); PORTD |= (1<<LED2); _delay_ms(TIME); PORTD &= ~(1<<LED2); PORTD |= (1<<LED1); _delay_ms(TIME); } return 0; } |