Forum: Mikrocontroller und Digitale Elektronik ATtiny416 Startschwierigkeiten


von Fabian G. (realghost)


Lesenswert?

Salli

Ich habe viel Programmiererfahrung mit 8-Bit Mikrocontrollern von Atmel. 
Jetzt habe ich den ATtiny416 entdeckt, welcher einen "Peripheral Touch 
Controller" integriert hat. Dazu verwende ich ein "ATtiny416 XNANO" Kit. 
Jedoch scheitere ich schon an einem normalen Blink Programm.

Kann mir jemand weiterhelfen?

Hier der Code:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
5
int main(void)
6
{
7
   PORTB_DIR |= (1<<1);
8
   PORTB_OUT = 0x00;
9
    while (1) 
10
    {
11
     PORTB.OUTSET = PIN1_bm;
12
     _delay_ms(500);
13
    PORTB.OUTCLR = PIN1_bm;
14
     _delay_ms(500);
15
    }
16
}

von Felix (Gast)


Lesenswert?

Erstmal bei Portb oben Punkte statt _ nutzen. Und dann mal schreiben, 
was für ein Fehler vorliegt.

von Fabian G. (realghost)


Lesenswert?

Ich habe eine LED am Pin 1 von Port B angeschlossen. Diese sollte 
blinken, was sie jedoch nicht tut.

von fop (Gast)


Lesenswert?

Felix schrieb:
> Erstmal bei Portb oben Punkte statt _ nutzen. Und dann mal schreiben,
> was für ein Fehler vorliegt.

Ich denke, das ist Mumpe, da per Define das Eine auf das Andere 
umgesetzt wird. Der Compiler scheint ja auch ohne Gemecker durch zu 
laufen.

Wie sieht es denn bei den Fuse-Bits aus ?
- richtige Taktquellle gewählt
- Watchdog lahm gelegt
- Crc - Check lahm gelegt

von Felix (Gast)


Lesenswert?

Wie wurde die Led angeschlossen (soll leuchten bei High/Low)?
Leuchtet die Led nach Konfiguration des Ports zu Beginn des Programms?
Mal die Konfiguration oben so geändert, dass die Led leuchten müsste?
Die Unterstriche durch Punkte ersetzt?
Mal in die  Lss-Datei geschaut, was im Assemblercode steht?
Richtige Taktquelle eingestellt?
Mit Oszilloskop geprüft, wenn möglich?

Bitte gebt doch mal Infos heraus. Es ist doch bestimmt möglich, selbst 
zu sehen, was Außenstehende nicht wissen können...

von Sebastian R. (sebastian_r569)


Lesenswert?

die delay.h möchte sehr gerne die CPU-Frequenz wissen.

ein
1
#ifndef F_CPU
2
   #define F_CPU 8000000UL
3
#endif

für in diesem Fall 8MHz (bitte entsprechend deinem Aufbau anpassen) kann 
auch schon mal sehr hilfreich sein.

von Fabian G. (realghost)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die vielen Antworten!

fop schrieb:
> Wie sieht es denn bei den Fuse-Bits aus ?
> - richtige Taktquellle gewählt
> - Watchdog lahm gelegt
> - Crc - Check lahm gelegt

Die Fuse-Bits sollten korrekt sein. Habe sie noch angehängt.

Felix schrieb:
> Wie wurde die Led angeschlossen (soll leuchten bei High/Low)?
> Leuchtet die Led nach Konfiguration des Ports zu Beginn des Programms?
> Mal die Konfiguration oben so geändert, dass die Led leuchten müsste?

Die LED leuchtet bei Low. Im Main will ich mit "PORTB_OUT = 0x00;" den 
ganzen Port B auf Low schalten. Theoretisch sollte sie zu beginn 
leuchten.

Felix schrieb:
> Die Unterstriche durch Punkte ersetzt?

Habe ich ersetzt.

Felix schrieb:
> Mal in die  Lss-Datei geschaut, was im Assemblercode steht?

Kenne mich leider mit Assembler nicht so gut aus, dass ich die Lss-Datei 
komplett verstehe. Soll ich diese noch hochladen?

Felix schrieb:
> Richtige Taktquelle eingestellt?

Jap, 20MHz intern.

Felix schrieb:
> Mit Oszilloskop geprüft, wenn möglich?

Am Ausgang tut sich gar nichts. Der Ausgang ist konstant hochohmig.

Sebastian R. schrieb:
> für in diesem Fall 8MHz (bitte entsprechend deinem Aufbau anpassen) kann
> auch schon mal sehr hilfreich sein.

Habe ich mit 20MHz angepasst, hat leider nichts geändert.





Ich glaube ich habe soweit alles gepostet, was ich weiss. Ich nehme an, 
dass ich den Pin 1 von PORTB nicht richtig als Ausgang konfiguriere, 
weshalb er auch hochohmig ist. Wie konfiguriere ich den PORT Richtig? 
Mit dem Datenblatt wurde ich auch nicht schlauer. Ich kenne nur die art 
mit DDRx, diese funktioniert hier jedoch nicht.

: Bearbeitet durch User
von fop (Gast)


Lesenswert?

Nur nochmal zur Sicherheit nachgefragt : Du hast eine zusätzliche Led 
mit Vorwiderstand an Port B 1 angeschlossen ?
Die Led, die schon auf dem "ATtiny416 XNANO" Kit drauf ist, hängt 
nämlich an Port B 5.

von AVR (Gast)


Lesenswert?

Hallo Fabian,

ich musste mich vor kurzem auch in die neue AVR Reihe einarbeiten. Mir 
haben die „Getting startend“ von Microchip sehr geholfen:
https://www.microchip.com/wwwproducts/en/ATTINY416
Dort unter Documents die TB3209 bis TB3218.

von Fabian G. (realghost)


Lesenswert?

fop schrieb:
> Nur nochmal zur Sicherheit nachgefragt : Du hast eine zusätzliche
> Led
> mit Vorwiderstand an Port B 1 angeschlossen ?
> Die Led, die schon auf dem "ATtiny416 XNANO" Kit drauf ist, hängt
> nämlich an Port B 5.

Jup habe eine zusätzliche LED an Port B 1 angeschlossen

AVR schrieb im Beitrag #6138368:
> Hallo Fabian,
>
> ich musste mich vor kurzem auch in die neue AVR Reihe einarbeiten. Mir
> haben die „Getting startend“ von Microchip sehr geholfen:
> https://www.microchip.com/wwwproducts/en/ATTINY416
> Dort unter Documents die TB3209 bis TB3218.

Danke, werde mir die Dokumente einmal anschauen.

von m.n. (Gast)


Lesenswert?

Fabian G. schrieb:
> Am Ausgang tut sich gar nichts. Der Ausgang ist konstant hochohmig.

Dann hast Du Deinen Code nicht in den µC geladen und gestartet.
Ist bei Dir vielleicht der Simulator aktiviert? Das würde das Verhalten 
erklären.

von AVR (Gast)


Lesenswert?

Ich habe auch das ATTINY416-XNANO verwendet und folgender Code hat super 
funktioniert:
[c]
#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 3333333UL

int main(void)
{
  PORTF.DIR |= PIN5_bm;
    while (1)
    {
    PORTF.DIRSET = PIN5_bm;
    _delay_ms(500);
    PORTF.DIRCLR = PIN5_bm;
    _delay_ms(500);
    }
}

Die eingebaute LED ist an PINB5 angeschlossen.

von m.n. (Gast)


Lesenswert?

Fabian G. schrieb:
> Felix schrieb:
>> Richtige Taktquelle eingestellt?
>
> Jap, 20MHz intern.

Der Vorteiler ist aber noch aktiv. Abschalten kann man ihn wie folgt:
1
  CPU_CCP = 0xd8;
2
  CLKCTRL_MCLKCTRLB = 0x00;     // kein Vorteiler

von OT512 (Gast)


Lesenswert?

Für die Taktfrequenz sollte man im Datenblatt den Punkt "Main Clock 
after Reset" beachten - nach dem Reset startet der ATTiny nur mit 1/6 
der eingestellten Frequenz. Die LED sollte aber trotzdem blinken - nur 
langsamer...

Ansonsten sollte

PORTB.DIRSET = PIN1_bm;
PORTB.OUTSET = PIN1_bm; oder
PORTB.OUTCLR = PIN1_bm;
PORTB.OUTTGL = PIN1_bm;

funktionieren

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

AVR schrieb im Beitrag #6138423:
> #include <avr/io.h>
> #include <util/delay.h>
>
> #define F_CPU 3333333UL

So erfährt delay.h allerdings nichts von deiner Taktfrequenz. Das define 
sollte vor dem #include stehen.

von Fabian G. (realghost)


Lesenswert?

Hatte plötzlich Probleme, mit dem programmieren des ATtiny416. Konnte 
feststellen, dass dieser keine Antwort mehr auf den ATmega32 gab. Habe 
den Tiny kurz ausgewechselt und jetzt funktioniert es.

OT512 schrieb:
> Für die Taktfrequenz sollte man im Datenblatt den Punkt "Main Clock
> after Reset" beachten - nach dem Reset startet der ATTiny nur mit 1/6
> der eingestellten Frequenz. Die LED sollte aber trotzdem blinken - nur
> langsamer...

Habe ich auch soeben festgestellt, dass er mit einer Taktfrequenz von 
3.33MHz läuft. Habe die zwei Zeilen von m.n. in meinen Code integriert. 
Funktioniert jetzt mit 20MHz.

Danke für die Hilfe!

Noch eine weiter Frage. Kennt sich jemand mit dem "Peripheral Touch
Controller" bzw. mit der QTouch Library aus?

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.