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


von Andreas F. (beanie)


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

von Ted K. (ted1405)


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.

von Andreas F. (beanie)


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.

von Andreas F. (beanie)


Lesenswert?

Falls es am Code liegt hier das Programm. momentan nur Testroutine in 
der main Funktion.
1
/*
2
 * Cocktailmaschine_Mainboard.c
3
 *
4
 * Created: 26.04.2012 20:35:27
5
 *  Author: Andreas F.
6
7
    Cocktailmachine Firmware
8
    Copyright (C) 2012  Andreas F.
9
10
    This program is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
15
    This program is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
20
    You should have received a copy of the GNU General Public License
21
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 */ 
23
24
/*-----------------Einstellungen------------------*/
25
26
#ifndef F_CPU
27
#warning "F_CPU war nicht definiert. Wird jetzt definiert"
28
#define F_CPU 16000000UL
29
#endif
30
31
/*-------------------Includes---------------------*/
32
33
#include <avr/io.h>
34
#include <util/delay.h>
35
36
/*------------Defines für Motor-Pins--------------*/
37
38
/*Motor 1*/
39
#define en1      PA0
40
#define dir1    PA1
41
#define clk1    PA2
42
#define m1_port    PORTA
43
44
/*Motor 2*/
45
#define en2      PB0
46
#define dir2    PB1
47
#define clk2    PB2
48
#define m2_port    PORTB
49
50
/*Motor 3*/
51
#define en3      PC2
52
#define dir3    PC3
53
#define clk3    PC4
54
#define m3_port    PORTC
55
56
/*Motor 4*/
57
#define en4      PC5
58
#define dir4    PC6
59
#define clk4    PC7
60
#define m4_port    PORTC
61
62
/*------------Defines für Pollin-Board------------*/
63
64
/*SPI-Bus*/
65
#define MOSI_pin    PB5
66
#define MISO_pin    PB6
67
#define SCK_pin      PB7
68
69
/*I²C-Bus*/
70
#define SCL_pin      PC0
71
#define SDA_pin      PC1
72
73
/*RS232*/
74
#define RXD_pin      PD0
75
#define TCD_pin      PD1
76
77
/*LEDs und Taster*/
78
#define Taster1      PD2
79
#define Taster2      PD3
80
#define Taster3      PD4
81
#define LED1      PD5
82
#define LED2      PD6
83
#define Summer      PD7
84
85
/*------------------Konstanten--------------------*/
86
87
#define BAUDRATE    9600UL
88
#define TIME      500
89
90
/*------------------------------------------------*/
91
92
void beep ()
93
{
94
  for (int i=0;i<100;i++)
95
  {
96
    PORTD |= (1<<Summer);
97
    _delay_us(500);
98
    PORTD &= ~(1<<Summer);
99
    _delay_us(500);
100
  }
101
  
102
    for (int i=0;i<100;i++)
103
  {
104
    PORTD |= (1<<Summer);
105
    _delay_us(270);
106
    PORTD &= ~(1<<Summer);
107
    _delay_us(270);
108
  }
109
}
110
111
void motor1_run(int dir, int steps)
112
{
113
  //Enable Bit setzen
114
    m1_port |= (1<<en1);
115
    
116
    //Direction Bit
117
    if (dir == 1)  m1_port |= (1<<dir1);  
118
    else      m1_port &= ~(1<<dir1);
119
    
120
    //CLOCK senden
121
    for (steps;steps>0;steps--)
122
    {
123
      m1_port &= ~(1<<clk1);
124
      _delay_ms(100);
125
      m1_port |= (1<<clk1);
126
      _delay_ms(100);
127
    }
128
    //Enable Bit löschen
129
    m1_port &= (1<<en1);
130
    
131
}
132
133
void motor2_run(int dir, int steps)
134
{
135
  //Enable Bit setzen
136
    m2_port |= (1<<en2);
137
    
138
    //Direction Bit
139
    if (dir == 1)  m2_port |= (1<<dir2);  
140
    else      m2_port &= ~(1<<dir2);
141
    
142
    //CLOCK senden
143
    for (steps;steps>0;steps--)
144
    {
145
      m2_port &= ~(1<<clk2);
146
      _delay_ms(100);
147
      m2_port |= (1<<clk2);
148
      _delay_ms(100);
149
    }
150
    //Enable Bit löschen
151
    m2_port &= (1<<en2);
152
    
153
}
154
155
void motor3_run(int dir, int steps)
156
{
157
  //Enable Bit setzen
158
    m3_port |= (1<<en3);
159
    
160
    //Direction Bit
161
    if (dir == 1)  m3_port |= (1<<dir3);  
162
    else      m3_port &= ~(1<<dir3);
163
    
164
    //CLOCK senden
165
    for (steps;steps>0;steps--)
166
    {
167
      m3_port &= ~(1<<clk3);
168
      _delay_ms(100);
169
      m3_port |= (1<<clk3);
170
      _delay_ms(100);
171
    }
172
    //Enable Bit löschen
173
    m3_port &= (1<<en3);
174
    
175
}
176
177
void motor4_run(int dir, int steps)
178
{
179
  //Enable Bit setzen
180
    m4_port |= (1<<en4);
181
    
182
    //Direction Bit
183
    if (dir == 1)  m4_port |= (1<<dir4);  
184
    else      m4_port &= ~(1<<dir4);
185
    
186
    //CLOCK senden
187
    for (steps;steps>0;steps--)
188
    {
189
      m4_port &= ~(1<<clk4);
190
      _delay_ms(100);
191
      m4_port |= (1<<clk4);
192
      _delay_ms(100);
193
    }
194
    //Enable Bit löschen
195
    m4_port &= (1<<en4);
196
    
197
}
198
199
void wodka_lemon()
200
{
201
  motor1_run(0,100);
202
  motor2_run(0,500);
203
}
204
205
206
int main(void)
207
{
208
  /*----------------Initialisierung-----------------*/
209
  /*Ports konfigurieren 1=Ausgang 0=Eingang*/
210
  
211
  DDRA = 0b00000111;      //MOSI, MISO, SCK, SCL, SDA, RXD und TXD ???
212
  DDRB = 0b00000111;
213
  DDRC = 0b11111100;
214
  DDRD = 0b11100010;
215
  
216
  /*Grundzustand Ports
217
    CLK Signale werden standardmäßig auf HIGH gesetzt (CLOCK von L297 Active Low)*/
218
  PORTA = 0b00000100;
219
  PORTB = 0b00000100;
220
  PORTC = 0b10010000;
221
  PORTD = 0b00000000;
222
  
223
  /*-----------------Hauptprogramm------------------*/
224
  
225
  beep();
226
  
227
    while(1)
228
    {
229
    PORTD &= ~(1<<LED1);
230
        PORTD |= (1<<LED2);
231
    _delay_ms(TIME);
232
    
233
    PORTD &= ~(1<<LED2);
234
    PORTD |= (1<<LED1);
235
    _delay_ms(TIME);
236
  }
237
  
238
  return 0;
239
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.