www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtTiny Problem


Autor: Chriatian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Experten,

ich haben ein Problem mit dem AtTiny12 den ich mit Bascom Programmieren
möchte der aber nicht will wenn ich das Programm einspiele

$regfile = "at12def.dat"
$crystal = 1200000              ‘habe ich igrend wo gefunden
$tiny
$noramclear

 Ddrb = &B00001100                                          'PB2 und
PB3 Ausgang
Portb = &B00000111                                          'PullUp
von PB0 bis PB2 setzen

 Wait 5                                                     'Zeit in
Sekunden

 Do
   If Pinb.0 = 0 Then Portb.2 = 0
   If Pinb.1 = 0 Then
      Portb.3 = 1
   Else
      Portb.3 = 0
   End If
 Loop

Setzt er zwar den Ausgang PB2 aber ändert nichts am PB3 mache ich etwas
falsch weil mit einem AT90S2313 dieses Programm ohne Probleme geht ich
diesen aber nicht unbedingt verwenden wollte da ich ja nicht soviel µC
brauche wenn es auch ein kleinerer tun würde ;-)

Ich hoffe ihr könnt mit da weiter Helfen

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie? Es regt sich überhaupt was?
Normalerweise sollte garnichts gehen.
Grundsätzlich gilt: Controller ohne SRAM können nur in Assembler
programmiert werden, da Hochsprachen-Compiler immer RAM für Variablen
und Stack erwarten.
Der ATTiny12 hat KEIN SRAM.

Gruss
Jadeclaw.

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt steht das der Tiny12 kein Ram hat, möglicherweise erklärt
das warum der 2313 geht.

Autor: Marc Meise (bytewood) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Controller ohne SRAM können mit BASCOM nur eingeschränkt betrieben
werden. Schau mal in der Hilfe von Bascom nach, oder im MCS Forum.
Du kannst zwar die Ports setzen und löschen, dann ist aber auch
Schluss. Konstrukte, wie IF... etc. funktionieren nicht.
Etwas besser ist der Tiny13, da funktionieren schon mal die
Verzweigungen etc. Aber auch hier: keine Variablen möglich -> der SRAM
ist zu klein (lässt sich aber super mit gcc proggen).
Meine Empfehlung in Sachen Bascom:
Als kleinsten uC den 2313 oder vergleichbaren Typen mit SRAM hernehmen
- nichts drunter.

Gruß

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Controller ohne SRAM können mit BASCOM nur eingeschränkt betrieben
werden. Schau mal in der Hilfe von Bascom nach, oder im MCS Forum.
Du kannst zwar die Ports setzen und löschen, dann ist aber auch
Schluss. Konstrukte, wie IF... etc. funktionieren nicht.

lol. MCS ist ja ne ganz tolle Firma. Schreiben natürlich nicht hin,
dass der Tiny nicht kompatibel ist, sondern machen einfach 3 Funktionen
ausführbar. Reicht ja auch! (haha!)

Auf der AVR-GCC Seite steht wenigstens, dass der Chip inkompatibel ist
mit dem AVR-GCC.

Autor: Chriatian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Du kannst zwar die Ports setzen und löschen, dann ist aber auch
Schluss."

Wozu kann ich denn dann diese µC verwenden wenn man nur die Ports ein
und ausschalten kann und keinerlei logik in sie einprogrammieren kann?

"Controller ohne SRAM können nur in Assembler"

Könnte mir da einer Bitte das Prog in ASM umschreiben da ich Leider
keine große Ahnung von „Registerschubsen“ habe.

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das der kein SRAM hat stimmt nicht. Ganze 32 byte stehen zur Verfügung.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Könnte mir da einer Bitte das Prog in ASM umschreiben da ich Leider
> keine große Ahnung von „Registerschubsen“ habe

Lässt sich alles lernen.
Siehe das AVR-Tutorial auf dieser Seite.
Mit dem Abschnitt I/O Grundlagen hast du eigentlich schon
alles beisammen um dein Testprogramm zu schreiben.

Autor: Marc Meise (bytewood) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Chriatian
>Wozu kann ich denn dann diese µC verwenden wenn man nur die Ports ein
>und ausschalten kann...

Es programmiert ja nicht jeder in Bascom.
Der kleine Tiny12 kann ja ne ganze Menge (und Fix ist er auch), ist
halt eben nur in Assembler programmierbar.
Bascom braucht viel SRAM, weshalb die "kleinen" Typen nicht
wirklich zu gebrauchen sind (in Bascom meine ich :-)
Wenn ein Portpin auf einen Zustand wartet, den Zustand bekommt, und
dann irgendwelche Ausgänge setzt - das ist gerade noch mit dem Tiny13
und Bascom möglich, weil da keine Variablen benutzt werden müssen (im
einfachsten Fall); wo hingegen in C, meines Wissens nach, keine
Einschränkungen sind.

Gruß

Autor: Chriatian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie würde den mein Programm in C aussehen "...wo hingegen in C, meines
Wissens nach, keine Einschränkungen sind..."


Etwa so:
#include <avr/io.h>
#include <stdio.h>
#include <avr/delay.h>      /* definiert _delay_ms() ab avr-libc
Version 1.2.0 */

int main(void)
{
   DDRB &= ~( 1 << PB0 );   /* Eingang */
   DDRB &= ~( 1 << PB1 );   /* Eingang */
   PORTB |= ( 1 << PB0 );   /* Pullup-Widerstand */
   PORTB |= ( 1 << PB1 );   /* Pullup-Widerstand */
   PORTB |= ( 1 << PB2 );   /* Pullup-Widerstand */

   _delay_ms(5000); /* 5Sekunden */

   if ( !(PINB & (1<<PINB0)) )
   {
     PORTB &= ~( 1 << PB2 );
   }

   if ( !(PINB & (1<<PINB1)) )
   {
     PORTB &= ~( 1 << PB3 );
   }
   else
   {
     PORTB |= ( 1 << PB3 );
   }
}

nur geht der Compiler mit einer Fehlermeldung ab wenn ich den Code mit
der delay Anweisung Compiler das ist aber was ich brauche

ps.: könnte das Prog leider noch nicht testen ob der Rest wenigstens
auf einen AtTiny12 läuft

Autor: Marc Meise (bytewood) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Chriatian

Hier das C-Prog für den Tiny13, müsste funktionieren, hab's aber nicht
getestet. Ich bezweifele aber, dass es auf dem Tiny 12 (siehe Thread
oben) läuft.

Gute Nacht

#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB=0b00001100; //PB4 und PB3 sind Ausgänge, oder DDRB=0x0C
PORTB=0b00000111; //Pullups an auf 0,1,2, oder DDRB=0x07
_delay_ms(5000); //5 Sek. warten, wofür auch immer das gut sein soll
  while(1)
  {
  if (PINB &(1<<PINB0)) //wenn B0 Low
    {
    PORTB &=~(1<<PB2); //dann B2 Low
    }
  if (PINB &(1<<PINB1)) //wenn B1 Low
    {
    PORTB |=(1<<PB3); //dann B3 High
    }
  else
    {
    PORTB &=~(1<<PB3); //sonst B3 Low
    }
  }
return 0;
}

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Könnte mir da einer Bitte das Prog in ASM umschreiben da ich Leider
> keine große Ahnung von &#8222;Registerschubsen&#8220; habe.

präzisiere Bitte Die aufgabenstellung, Denn ich Habe Von bascom Leider
Keine ahnung. Am besten Mit Einem Eindeutigen programmablaufplan. Dann
Würde ich dir Das in asm Mit benutzung Eines timers Schreiben.

...HanneS...

Autor: Marc Meise (bytewood) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, muss natürlich
if (!(PINB &(1<<PINB0))) //wenn B0 Low
heissen

Gruß

Autor: Arnobär (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte eigentlich das tuen was du haben möchtest ^^

.include "tn12def.inc"

.def Temp   = r16
.def CountL = r17
.def CountM = r18
.def CountH = r19

.equ CLOCK = 1200000

.org 0x00
    rjmp _Reset
    reti
    reti
    reti
    reti
    reti

_Reset:
    ldi Temp, (1<<PB2)|(1<<PB3)
    out DDRB, Temp

    ldi Temp, (1<<PB0)|(1<<PB1)|(1<<PB2)
    out PORTB, Temp

    rcall _Delay5s

_Loop:
    sbis PINB, 0
    cbi PORTB, 2

    sbis PINB, 1
    rjmp _SPB3

    cbi PORTB, 3
    rjmp _Loop

_SPB3:
    sbi PORTB, 3
    rjmp _Loop

;-> 6002401 (0x5696DF) Cycles = 5.00s bei 1.2MHz ;)
_Delay5s:
    ldi CountL, 0xDF
    ldi CountM, 0x96
    ldi CountH, 0x56
_Delay5sb:
    subi CountL, $01
    sbci CountM, $00
    sbci CountH, $00
    brne _Delay5sb
    nop
    nop
    ret

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.