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
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.
Im Datenblatt steht das der Tiny12 kein Ram hat, möglicherweise erklärt das warum der 2313 geht.
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ß
>>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.
"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.
> 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.
@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ß
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
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; }
> Könnte mir da einer Bitte das Prog in ASM umschreiben da ich Leider > keine große Ahnung von „Registerschubsen“ 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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.