Forum: Mikrocontroller und Digitale Elektronik Ungewollter Reset


von Georg (Gast)


Lesenswert?

Hallo zusammen,

vielleicht hat jemand eine Idee für mich: Ich versuche gerade eine 
kleine Schaltung mit einem ATtiny13V zu programmieren. Dazu verwende ich 
AVR Studio 4 und einen mkII. Das erste Problem war, dass ich nur den 
ATtiny13A als Device im AVR Studio auswählen konnte. Es scheint aber 
auch so zu funktionieren. Kann ich irgendwie auch den ATtiny13V 
einbinden?
Außerdem resetet sich der Controller etwa sekündlich, solange er an der 
Programmier-Schnittstelle hängt. Das hatte ich bei anderen Controllern 
bisher nicht. Kann jemand helfen?

von Markus (Gast)


Lesenswert?

Wie bemerkst du den reset?
Program?
Ohne Infos kann dir niemand helfen.

von Tim (Gast)


Lesenswert?

MCUSR könnte die helfen.

von Georg (Gast)


Lesenswert?

Zumindest beginnt das Programm von vorn. Ich steuere mit 2 Pins einen 
Motortreiber an (L293) und lasse den Motor so erst in eine Richtung 
drehen und nach einem delay von 200ms in die andere. Nach 200ms sollte 
der Motor also nur noch in eine Richtung drehen. Verbunden mit dem PC 
fährt er aber immer hin und her.
1
#include <avr/io.h>
2
#include <stdint.h>
3
#define F_CPU 1000000UL
4
#include <util/delay.h>
5
6
int main()
7
{  
8
  DDRB = (1 << PB0);     /* Output */
9
  PINB = (1 << PB0);     /* internal Pullups */
10
11
  DDRB = (1 << PB1);     /* Output */
12
  PINB = (1 << PB1);     /* internal Pullups */
13
14
  PORTB=0x02;
15
  _delay_ms(200);
16
  PORTB=0x01;
17
18
  while(1)
19
  {
20
  }  
21
  return 0;
22
}

von Markus (Gast)


Lesenswert?

Stromversorgung bricht ein.

von Kalle (Gast)


Lesenswert?

Wie hast du das verkabelt?
Du solltest aufjedenfall mal testen ob die Spannung absackt, das 
Programm ist korrekt, ich würde daher auch den Fehler in der Hardware 
suchen.

von Georg (Gast)


Lesenswert?

Dass die Versorgung einbricht kann ich mir eigentlich gar nicht 
vorstellen, da die Stromquelle eine LiIon Zelle mit extrem geringem 
Innenwiderstand ist. Ich werde aber morgen mal die Spannung am Reset und 
die Versorgungsspannung am Oszi ansehen, zu Hause habe ich leider noch 
keines.

Die Platine habe ich in Eagle erstellt und selbst geätzt.

Tim schrieb:
> MCUSR könnte die helfen.
Das werde ich mir auch nochmal ansehen.

von jmp (Gast)


Lesenswert?

Hi,

> ... das Programm ist korrekt ...

Das ist Ansichtssache. Nach der vermutlich intendierten Funktion ist 
es das nämlich nicht:

  DDRB = (1 << PB0);     /* Output */
  PINB = (1 << PB0);     /* internal Pullups */

  DDRB = (1 << PB1);     /* Output */
  PINB = (1 << PB1);     /* internal Pullups */

soll wohl eher

  DDRB = (1 << PB0);     /* Output */
  PINB = (1 << PB0);     /* internal Pullups */

  DDRB |= (1 << PB1);     /* Output */
  PINB |= (1 << PB1);     /* internal Pullups */

heißen.

Oder besser gleich

DDRB = (1 << PB0) | (1 << PB1);
PINB = (1 << PB0) | (1 << PB1);

--jmp

von Thomas E. (thomase)


Lesenswert?

jmp schrieb:
> Hi,
>
>> ... das Programm ist korrekt ...
>
> Das ist Ansichtssache.
Nicht einmal das. Die Initialisierung ist einfach Müll.

Georg schrieb:
>   DDRB = (1 << PB0);     /* Output */
PB0 = Ausgang, PB1 = Eingang

>   PINB = (1 << PB0);     /* internal Pullups */
Toggle PB0. Da PB0 nach Reset 0 war, ist es jetzt 1. Das ist aber kein 
internal Pullup, sondern der Ausgang ist jetzt HIGH.

>   DDRB = (1 << PB1);     /* Output */
PB0 = Eingang, PB1 = Ausgang.
>   PINB = (1 << PB1);     /* internal Pullups */
Toggle PB1. s.o.

PB0 = Eingang, High
PB1 = Ausgang, High

Das Toggeln kann man sich zudem noch sparen, da der Ausgang und der 
Eingangs-Pullup ohnehim im Anschluss wieder geändert werden.

>   PORTB=0x02;
PB1 = Ausgang, High; PB0 = Eingang, LOW
>   _delay_ms(200);
>   PORTB=0x01;
PB1 = Ausgang, LOW; PB0 = Eingang, HIGH

Irgendwie sinnlos.


mfg.

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.