www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVRISP mkII löst permanent Reset aus


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Andreas F. (beanie)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Ted K. (ted1405)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Andreas F. (beanie)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Andreas F. (beanie)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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;
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net